diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index d10b683..67085b3 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -342,3 +342,4 @@
 75c3897541ecb52ee16d001ea605b12971df7303 jdk-9+97
 48987460c7d49a29013963ee44d090194396bb61 jdk-9+98
 7c0577bea4c65d69c5bef67023a89d2efa4fb2f7 jdk-9+99
+c1f30ac14db0eaff398429c04cd9fab92e1b4b2a jdk-9+100
diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4
index 5c2f1b6..463498f 100644
--- a/common/autoconf/build-performance.m4
+++ b/common/autoconf/build-performance.m4
@@ -253,6 +253,24 @@
 
 ################################################################################
 #
+# Runs icecc-create-env once and prints the error if it fails
+#
+# $1: arguments to icecc-create-env
+# $2: log file
+#
+AC_DEFUN([BPERF_RUN_ICECC_CREATE_ENV],
+[
+  cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+      && ${ICECC_CREATE_ENV} $1 > $2 2>&1
+  if test "$?" != "0"; then
+    AC_MSG_NOTICE([icecc-create-env output:])
+    cat $2
+    AC_MSG_ERROR([Failed to create icecc compiler environment])
+  fi
+])
+
+################################################################################
+#
 # Optionally enable distributed compilation of native code using icecc/icecream
 #
 AC_DEFUN([BPERF_SETUP_ICECC],
@@ -271,16 +289,18 @@
     # be sent to the other hosts in the icecream cluster.
     icecc_create_env_log="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env.log"
     ${MKDIR} -p ${CONFIGURESUPPORT_OUTPUTDIR}/icecc
-    AC_MSG_CHECKING([for icecc build environment for target compiler])
+    # Older versions of icecc does not have the --gcc parameter
+    if ${ICECC_CREATE_ENV} | $GREP -q -e --gcc; then
+      icecc_gcc_arg="--gcc"
+    fi
     if test "x${TOOLCHAIN_TYPE}" = "xgcc"; then
-      cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-          && ${ICECC_CREATE_ENV} --gcc ${CC} ${CXX} > ${icecc_create_env_log}
+      BPERF_RUN_ICECC_CREATE_ENV([${icecc_gcc_arg} ${CC} ${CXX}], \
+          ${icecc_create_env_log})
     elif test "x$TOOLCHAIN_TYPE" = "xclang"; then
       # For clang, the icecc compilerwrapper is needed. It usually resides next
       # to icecc-create-env.
       BASIC_REQUIRE_PROGS(ICECC_WRAPPER, compilerwrapper)
-      cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-          && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log}
+      BPERF_RUN_ICECC_CREATE_ENV([--clang ${CC} ${ICECC_WRAPPER}], ${icecc_create_env_log})
     else
       AC_MSG_ERROR([Can only create icecc compiler packages for toolchain types gcc and clang])
     fi
@@ -289,24 +309,31 @@
     # to find it.
     ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`"
     ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}"
+    if test ! -f ${ICECC_ENV_BUNDLE}; then
+      AC_MSG_ERROR([icecc-create-env did not produce an environment ${ICECC_ENV_BUNDLE}])
+    fi
+    AC_MSG_CHECKING([for icecc build environment for target compiler])
     AC_MSG_RESULT([${ICECC_ENV_BUNDLE}])
     ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${CC} ICECC_CXX=${CXX} ${ICECC_CMD}"
 
     if test "x${COMPILE_TYPE}" = "xcross"; then
       # If cross compiling, create a separate env package for the build compiler
-      AC_MSG_CHECKING([for icecc build environment for build compiler])
       # Assume "gcc" or "cc" is gcc and "clang" is clang. Otherwise bail.
+      icecc_create_env_log_build="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env_build.log"
       if test "x${BUILD_CC##*/}" = "xgcc" ||  test "x${BUILD_CC##*/}" = "xcc"; then
-        cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-            && ${ICECC_CREATE_ENV} --gcc ${BUILD_CC} ${BUILD_CXX} > ${icecc_create_env_log}
+        BPERF_RUN_ICECC_CREATE_ENV([${icecc_gcc_arg} ${BUILD_CC} ${BUILD_CXX}], \
+            ${icecc_create_env_log_build})
       elif test "x${BUILD_CC##*/}" = "xclang"; then
-        cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-            && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log}
+        BPERF_RUN_ICECC_CREATE_ENV([--clang ${BUILD_CC} ${ICECC_WRAPPER}], ${icecc_create_env_log_build})
       else
         AC_MSG_ERROR([Cannot create icecc compiler package for ${BUILD_CC}])
       fi
-      ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`"
+      ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log_build}`"
       ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}"
+      if test ! -f ${ICECC_ENV_BUNDLE}; then
+        AC_MSG_ERROR([icecc-create-env did not produce an environment ${ICECC_ENV_BUNDLE}])
+      fi
+      AC_MSG_CHECKING([for icecc build environment for build compiler])
       AC_MSG_RESULT([${ICECC_ENV_BUNDLE}])
       BUILD_ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${BUILD_CC} \
           ICECC_CXX=${BUILD_CXX} ${ICECC_CMD}"
diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4
index af375d2..927bb52 100644
--- a/common/autoconf/flags.m4
+++ b/common/autoconf/flags.m4
@@ -128,6 +128,26 @@
   else
     COMPILER_TARGET_BITS_FLAG="-m"
     COMPILER_COMMAND_FILE_FLAG="@"
+
+    # The solstudio linker does not support @-files.
+    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
+      COMPILER_COMMAND_FILE_FLAG=
+    fi
+
+    # Check if @file is supported by gcc
+    if test "x$TOOLCHAIN_TYPE" = xgcc; then
+      AC_MSG_CHECKING([if @file is supported by gcc])
+      # Extra emtpy "" to prevent ECHO from interpreting '--version' as argument
+      $ECHO "" "--version" > command.file
+      if $CXX @command.file 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then
+        AC_MSG_RESULT(yes)
+        COMPILER_COMMAND_FILE_FLAG="@"
+      else
+        AC_MSG_RESULT(no)
+        COMPILER_COMMAND_FILE_FLAG=
+      fi
+      rm -rf command.file
+    fi
   fi
   AC_SUBST(COMPILER_TARGET_BITS_FLAG)
   AC_SUBST(COMPILER_COMMAND_FILE_FLAG)
diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh
index f5e0859..de0cce6 100644
--- a/common/autoconf/generated-configure.sh
+++ b/common/autoconf/generated-configure.sh
@@ -3794,6 +3794,15 @@
 
 ################################################################################
 #
+# Runs icecc-create-env once and prints the error if it fails
+#
+# $1: arguments to icecc-create-env
+# $2: log file
+#
+
+
+################################################################################
+#
 # Optionally enable distributed compilation of native code using icecc/icecream
 #
 
@@ -4308,7 +4317,7 @@
 
 
 #
-# 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
@@ -4801,7 +4810,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1450277321
+DATE_WHEN_GENERATED=1452261921
 
 ###############################################################################
 #
@@ -45930,6 +45939,29 @@
   else
     COMPILER_TARGET_BITS_FLAG="-m"
     COMPILER_COMMAND_FILE_FLAG="@"
+
+    # The solstudio linker does not support @-files.
+    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
+      COMPILER_COMMAND_FILE_FLAG=
+    fi
+
+    # Check if @file is supported by gcc
+    if test "x$TOOLCHAIN_TYPE" = xgcc; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if @file is supported by gcc" >&5
+$as_echo_n "checking if @file is supported by gcc... " >&6; }
+      # Extra emtpy "" to prevent ECHO from interpreting '--version' as argument
+      $ECHO "" "--version" > command.file
+      if $CXX @command.file 2>&5 >&5; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        COMPILER_COMMAND_FILE_FLAG="@"
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+        COMPILER_COMMAND_FILE_FLAG=
+      fi
+      rm -rf command.file
+    fi
   fi
 
 
@@ -51742,12 +51774,28 @@
     fi
 
     if test "x${with_cups}" != x; then
-      CUPS_CFLAGS="-I${with_cups}/include"
-      CUPS_FOUND=yes
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers" >&5
+$as_echo_n "checking for cups headers... " >&6; }
+      if test -s "${with_cups}/include/cups/cups.h"; then
+        CUPS_CFLAGS="-I${with_cups}/include"
+        CUPS_FOUND=yes
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5
+$as_echo "$CUPS_FOUND" >&6; }
+      else
+        as_fn_error $? "Can't find 'include/cups/cups.h' under ${with_cups} given with the --with-cups option." "$LINENO" 5
+      fi
     fi
     if test "x${with_cups_include}" != x; then
-      CUPS_CFLAGS="-I${with_cups_include}"
-      CUPS_FOUND=yes
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers" >&5
+$as_echo_n "checking for cups headers... " >&6; }
+      if test -s "${with_cups_include}/cups/cups.h"; then
+        CUPS_CFLAGS="-I${with_cups_include}"
+        CUPS_FOUND=yes
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5
+$as_echo "$CUPS_FOUND" >&6; }
+      else
+        as_fn_error $? "Can't find 'cups/cups.h' under ${with_cups_include} given with the --with-cups-include option." "$LINENO" 5
+      fi
     fi
     if test "x$CUPS_FOUND" = xno; then
       # Are the cups headers installed in the default /usr/include location?
@@ -59543,11 +59591,23 @@
     # be sent to the other hosts in the icecream cluster.
     icecc_create_env_log="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env.log"
     ${MKDIR} -p ${CONFIGURESUPPORT_OUTPUTDIR}/icecc
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for target compiler" >&5
-$as_echo_n "checking for icecc build environment for target compiler... " >&6; }
+    # Older versions of icecc does not have the --gcc parameter
+    if ${ICECC_CREATE_ENV} | $GREP -q -e --gcc; then
+      icecc_gcc_arg="--gcc"
+    fi
     if test "x${TOOLCHAIN_TYPE}" = "xgcc"; then
-      cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-          && ${ICECC_CREATE_ENV} --gcc ${CC} ${CXX} > ${icecc_create_env_log}
+
+  cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+      && ${ICECC_CREATE_ENV} ${icecc_gcc_arg} ${CC} ${CXX} > \
+          ${icecc_create_env_log} 2>&1
+  if test "$?" != "0"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
+$as_echo "$as_me: icecc-create-env output:" >&6;}
+    cat \
+          ${icecc_create_env_log}
+    as_fn_error $? "Failed to create icecc compiler environment" "$LINENO" 5
+  fi
+
     elif test "x$TOOLCHAIN_TYPE" = "xclang"; then
       # For clang, the icecc compilerwrapper is needed. It usually resides next
       # to icecc-create-env.
@@ -59755,8 +59815,16 @@
   fi
 
 
-      cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-          && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log}
+
+  cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+      && ${ICECC_CREATE_ENV} --clang ${CC} ${ICECC_WRAPPER} > ${icecc_create_env_log} 2>&1
+  if test "$?" != "0"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
+$as_echo "$as_me: icecc-create-env output:" >&6;}
+    cat ${icecc_create_env_log}
+    as_fn_error $? "Failed to create icecc compiler environment" "$LINENO" 5
+  fi
+
     else
       as_fn_error $? "Can only create icecc compiler packages for toolchain types gcc and clang" "$LINENO" 5
     fi
@@ -59765,26 +59833,53 @@
     # to find it.
     ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`"
     ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}"
+    if test ! -f ${ICECC_ENV_BUNDLE}; then
+      as_fn_error $? "icecc-create-env did not produce an environment ${ICECC_ENV_BUNDLE}" "$LINENO" 5
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for target compiler" >&5
+$as_echo_n "checking for icecc build environment for target compiler... " >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ICECC_ENV_BUNDLE}" >&5
 $as_echo "${ICECC_ENV_BUNDLE}" >&6; }
     ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${CC} ICECC_CXX=${CXX} ${ICECC_CMD}"
 
     if test "x${COMPILE_TYPE}" = "xcross"; then
       # If cross compiling, create a separate env package for the build compiler
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for build compiler" >&5
-$as_echo_n "checking for icecc build environment for build compiler... " >&6; }
       # Assume "gcc" or "cc" is gcc and "clang" is clang. Otherwise bail.
+      icecc_create_env_log_build="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/icecc_create_env_build.log"
       if test "x${BUILD_CC##*/}" = "xgcc" ||  test "x${BUILD_CC##*/}" = "xcc"; then
-        cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-            && ${ICECC_CREATE_ENV} --gcc ${BUILD_CC} ${BUILD_CXX} > ${icecc_create_env_log}
+
+  cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+      && ${ICECC_CREATE_ENV} ${icecc_gcc_arg} ${BUILD_CC} ${BUILD_CXX} > \
+            ${icecc_create_env_log_build} 2>&1
+  if test "$?" != "0"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
+$as_echo "$as_me: icecc-create-env output:" >&6;}
+    cat \
+            ${icecc_create_env_log_build}
+    as_fn_error $? "Failed to create icecc compiler environment" "$LINENO" 5
+  fi
+
       elif test "x${BUILD_CC##*/}" = "xclang"; then
-        cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
-            && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log}
+
+  cd ${CONFIGURESUPPORT_OUTPUTDIR}/icecc \
+      && ${ICECC_CREATE_ENV} --clang ${BUILD_CC} ${ICECC_WRAPPER} > ${icecc_create_env_log_build} 2>&1
+  if test "$?" != "0"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: icecc-create-env output:" >&5
+$as_echo "$as_me: icecc-create-env output:" >&6;}
+    cat ${icecc_create_env_log_build}
+    as_fn_error $? "Failed to create icecc compiler environment" "$LINENO" 5
+  fi
+
       else
         as_fn_error $? "Cannot create icecc compiler package for ${BUILD_CC}" "$LINENO" 5
       fi
-      ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log}`"
+      ICECC_ENV_BUNDLE_BASENAME="`${SED} -n '/^creating/s/creating //p' ${icecc_create_env_log_build}`"
       ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/${ICECC_ENV_BUNDLE_BASENAME}"
+      if test ! -f ${ICECC_ENV_BUNDLE}; then
+        as_fn_error $? "icecc-create-env did not produce an environment ${ICECC_ENV_BUNDLE}" "$LINENO" 5
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for icecc build environment for build compiler" >&5
+$as_echo_n "checking for icecc build environment for build compiler... " >&6; }
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ICECC_ENV_BUNDLE}" >&5
 $as_echo "${ICECC_ENV_BUNDLE}" >&6; }
       BUILD_ICECC="ICECC_VERSION=${ICECC_ENV_BUNDLE} ICECC_CC=${BUILD_CC} \
diff --git a/common/autoconf/lib-cups.m4 b/common/autoconf/lib-cups.m4
index 2280edb..8a61bc0 100644
--- a/common/autoconf/lib-cups.m4
+++ b/common/autoconf/lib-cups.m4
@@ -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
@@ -48,12 +48,24 @@
     fi
 
     if test "x${with_cups}" != x; then
-      CUPS_CFLAGS="-I${with_cups}/include"
-      CUPS_FOUND=yes
+      AC_MSG_CHECKING([for cups headers])
+      if test -s "${with_cups}/include/cups/cups.h"; then
+        CUPS_CFLAGS="-I${with_cups}/include"
+        CUPS_FOUND=yes
+        AC_MSG_RESULT([$CUPS_FOUND])
+      else
+        AC_MSG_ERROR([Can't find 'include/cups/cups.h' under ${with_cups} given with the --with-cups option.])
+      fi
     fi
     if test "x${with_cups_include}" != x; then
-      CUPS_CFLAGS="-I${with_cups_include}"
-      CUPS_FOUND=yes
+      AC_MSG_CHECKING([for cups headers])
+      if test -s "${with_cups_include}/cups/cups.h"; then
+        CUPS_CFLAGS="-I${with_cups_include}"
+        CUPS_FOUND=yes
+        AC_MSG_RESULT([$CUPS_FOUND])
+      else
+        AC_MSG_ERROR([Can't find 'cups/cups.h' under ${with_cups_include} given with the --with-cups-include option.])
+      fi
     fi
     if test "x$CUPS_FOUND" = xno; then
       # Are the cups headers installed in the default /usr/include location?
diff --git a/corba/.hgtags b/corba/.hgtags
index 9bd082d..4a5ada0 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -342,3 +342,4 @@
 10a482b863582376d4ca229090334b23b05159fc jdk-9+97
 ea285530245cf4e0edf0479121a41347d3030eba jdk-9+98
 180212ee1d8710691ba9944593dfc1ff3e4f1532 jdk-9+99
+791d0d3ac0138faeb6110bd840a4545bc1950df2 jdk-9+100
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index ac6cea4..271e540 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -502,3 +502,4 @@
 de592ea5f7ba0f8a8c5afc03bd169f7690c72b6f jdk-9+97
 e5b1a23be1e105417ba1c4c576ab373eb3fa2c2b jdk-9+98
 f008e8cc10d5b3212fb22d58c96fa01d38654f19 jdk-9+99
+bdb0acafc63c42e84d9d8195bf2e2b25ee9c3306 jdk-9+100
diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp
index 463b421..b416aa7 100644
--- a/hotspot/src/share/vm/prims/jvm.cpp
+++ b/hotspot/src/share/vm/prims/jvm.cpp
@@ -285,7 +285,7 @@
   return os::javaTimeNanos();
 JVM_END
 
-// The function below is actually exposed by sun.misc.VM and not
+// The function below is actually exposed by jdk.internal.misc.VM and not
 // java.lang.System, but we choose to keep it here so that it stays next
 // to JVM_CurrentTimeMillis and JVM_NanoTime
 
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index a88e7f5..b016abb 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -342,3 +342,4 @@
 9c107c050335d7ee63b2a8b38ca5d498f19713a2 jdk-9+97
 52b01339235f24c93b679bd6b8fb36a1072ad0ac jdk-9+98
 52774b544850c791f1d1c67db2601b33739b18c9 jdk-9+99
+d45bcd374f6057851e3c2dcd45607cd362afadfa jdk-9+100
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index 26b9274..4f84f88 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -345,3 +345,4 @@
 7293db4716ee25b814e14f738b9acfb85700e3fa jdk-9+97
 67c84077edc3db6b24998b35970b37c01aae985e jdk-9+98
 97b31ca0dd77483cf20ff99a033a455673639578 jdk-9+99
+d0a97e57d2336238edf6a4cd60aafe67deb7258d jdk-9+100
diff --git a/jdk/.hgtags b/jdk/.hgtags
index 2af851e..9608d22 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -342,3 +342,4 @@
 fdd84b2265ddce7f50e084b7c8635189bba6f012 jdk-9+97
 f86ee68d1107dad41a27efc34306e0e56244a12e jdk-9+98
 e1a789be1535741274c9779f4d4ca3495196b5c3 jdk-9+99
+3d452840f48299a36842760d17c0c8402f0e1266 jdk-9+100
diff --git a/jdk/make/lib/NioLibraries.gmk b/jdk/make/lib/NioLibraries.gmk
index bc021b1..6b7d305 100644
--- a/jdk/make/lib/NioLibraries.gmk
+++ b/jdk/make/lib/NioLibraries.gmk
@@ -58,7 +58,10 @@
 ifeq ($(OPENJDK_TARGET_OS), aix)
   BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/make/mapfiles/libnio/mapfile-$(OPENJDK_TARGET_OS)
   BUILD_LIBNIO_EXFILES += \
-      NativeThread.c
+      /NativeThread.c
+  # Notice: we really need the leading slash here because otherwise every
+  # FILE_NAME in EXCLUDE_FILES will actually match any file ending in FILE_NAME
+  # (e.g. 'NativeThread.c' will also exclude 'AixNativeThread.c').
 endif
 
 $(eval $(call SetupNativeCompilation,BUILD_LIBNIO, \
diff --git a/jdk/make/mapfiles/libjava/mapfile-vers b/jdk/make/mapfiles/libjava/mapfile-vers
index dd7e58a..3ec9f53 100644
--- a/jdk/make/mapfiles/libjava/mapfile-vers
+++ b/jdk/make/mapfiles/libjava/mapfile-vers
@@ -216,6 +216,7 @@
 		Java_java_lang_SecurityManager_getClassContext;
 		Java_java_lang_Shutdown_halt0;
 		Java_java_lang_String_intern;
+		Java_java_lang_StringCoding_err;
 		Java_java_lang_StringUTF16_isBigEndian;
 		Java_java_lang_System_identityHashCode;
 		Java_java_lang_System_initProperties;
@@ -243,8 +244,6 @@
 		Java_java_util_TimeZone_getSystemTimeZoneID;
 		Java_java_util_TimeZone_getSystemGMTOffsetID;
 		Java_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8;
-		Java_sun_misc_MessageUtils_toStderr;
-		Java_sun_misc_MessageUtils_toStdout;
 		Java_sun_misc_NativeSignalHandler_handle0;
 		Java_sun_misc_Signal_findSignal;
 		Java_sun_misc_Signal_handle0;
@@ -274,12 +273,12 @@
 		Java_sun_reflect_Reflection_getClassAccessFlags;
                 Java_sun_misc_Version_getJdkVersionInfo;
                 Java_sun_misc_Version_getJvmVersionInfo;
-		Java_sun_misc_VM_latestUserDefinedLoader;
-                Java_sun_misc_VM_getuid;
-                Java_sun_misc_VM_geteuid;
-                Java_sun_misc_VM_getgid;
-                Java_sun_misc_VM_getegid;
-                Java_sun_misc_VM_initialize;
+		Java_jdk_internal_misc_VM_latestUserDefinedLoader;
+                Java_jdk_internal_misc_VM_getuid;
+                Java_jdk_internal_misc_VM_geteuid;
+                Java_jdk_internal_misc_VM_getgid;
+                Java_jdk_internal_misc_VM_getegid;
+                Java_jdk_internal_misc_VM_initialize;
 		Java_sun_misc_VMSupport_initAgentProperties;
 		Java_sun_misc_VMSupport_getVMTemporaryDirectory;
 
diff --git a/jdk/make/src/classes/build/tools/dtdbuilder/DTDParser.java b/jdk/make/src/classes/build/tools/dtdbuilder/DTDParser.java
index 753007a..0dee68e 100644
--- a/jdk/make/src/classes/build/tools/dtdbuilder/DTDParser.java
+++ b/jdk/make/src/classes/build/tools/dtdbuilder/DTDParser.java
@@ -35,8 +35,6 @@
 import java.util.BitSet;
 import java.text.MessageFormat;
 
-import sun.misc.MessageUtils;
-
 /**
  * A parser for DTDs. This parser roughly corresponds to the
  * rules specified in "The SGML Handbook" by Charles F. Goldfarb.
diff --git a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java
index 779257e..d739bc4 100644
--- a/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java
+++ b/jdk/src/java.base/share/classes/java/io/ObjectInputStream.java
@@ -2135,7 +2135,7 @@
      * corresponding modifications to the above class.
      */
     private static ClassLoader latestUserDefinedLoader() {
-        return sun.misc.VM.latestUserDefinedLoader();
+        return jdk.internal.misc.VM.latestUserDefinedLoader();
     }
 
     /**
diff --git a/jdk/src/java.base/share/classes/java/lang/Class.java b/jdk/src/java.base/share/classes/java/lang/Class.java
index 013b584..af75faf 100644
--- a/jdk/src/java.base/share/classes/java/lang/Class.java
+++ b/jdk/src/java.base/share/classes/java/lang/Class.java
@@ -56,6 +56,7 @@
 import java.util.Objects;
 import java.util.StringJoiner;
 import jdk.internal.misc.Unsafe;
+import jdk.internal.misc.VM;
 import jdk.internal.HotSpotIntrinsicCandidate;
 import sun.reflect.CallerSensitive;
 import sun.reflect.ConstantPool;
@@ -360,9 +361,9 @@
             // Reflective call to get caller class is only needed if a security manager
             // is present.  Avoid the overhead of making this call otherwise.
             caller = Reflection.getCallerClass();
-            if (sun.misc.VM.isSystemDomainLoader(loader)) {
+            if (VM.isSystemDomainLoader(loader)) {
                 ClassLoader ccl = ClassLoader.getClassLoader(caller);
-                if (!sun.misc.VM.isSystemDomainLoader(ccl)) {
+                if (!VM.isSystemDomainLoader(ccl)) {
                     sm.checkPermission(
                         SecurityConstants.GET_CLASSLOADER_PERMISSION);
                 }
diff --git a/jdk/src/java.base/share/classes/java/lang/Integer.java b/jdk/src/java.base/share/classes/java/lang/Integer.java
index e34ae9d..11afbef 100644
--- a/jdk/src/java.base/share/classes/java/lang/Integer.java
+++ b/jdk/src/java.base/share/classes/java/lang/Integer.java
@@ -28,6 +28,7 @@
 import java.lang.annotation.Native;
 import java.util.Objects;
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
 
 import static java.lang.String.COMPACT_STRINGS;
 import static java.lang.String.LATIN1;
@@ -1018,7 +1019,7 @@
      * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
      * During VM initialization, java.lang.Integer.IntegerCache.high property
      * may be set and saved in the private system properties in the
-     * sun.misc.VM class.
+     * jdk.internal.misc.VM class.
      */
 
     private static class IntegerCache {
@@ -1030,7 +1031,7 @@
             // high value may be configured by property
             int h = 127;
             String integerCacheHighPropValue =
-                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
+                VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
             if (integerCacheHighPropValue != null) {
                 try {
                     int i = parseInt(integerCacheHighPropValue);
diff --git a/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java b/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java
index 34c60a7..dcb471c 100644
--- a/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java
+++ b/jdk/src/java.base/share/classes/java/lang/StackStreamFactory.java
@@ -24,7 +24,7 @@
  */
 package java.lang;
 
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 import java.io.PrintStream;
 import java.lang.StackWalker.Option;
diff --git a/jdk/src/java.base/share/classes/java/lang/StringCoding.java b/jdk/src/java.base/share/classes/java/lang/StringCoding.java
index b1e25d5..fe87537 100644
--- a/jdk/src/java.base/share/classes/java/lang/StringCoding.java
+++ b/jdk/src/java.base/share/classes/java/lang/StringCoding.java
@@ -39,7 +39,6 @@
 import java.nio.charset.UnsupportedCharsetException;
 import java.util.Arrays;
 import jdk.internal.HotSpotIntrinsicCandidate;
-import sun.misc.MessageUtils;
 import sun.nio.cs.HistoricallyNamedCharset;
 import sun.nio.cs.ArrayDecoder;
 import sun.nio.cs.ArrayEncoder;
@@ -106,11 +105,11 @@
 
     private static void warnUnsupportedCharset(String csn) {
         if (warnUnsupportedCharset) {
-            // Use sun.misc.MessageUtils rather than the Logging API or
-            // System.err since this method may be called during VM
-            // initialization before either is available.
-            MessageUtils.err("WARNING: Default charset " + csn +
-                             " not supported, using ISO-8859-1 instead");
+            // Use err(String) rather than the Logging API or System.err
+            // since this method may be called during VM initialization
+            // before either is available.
+            err("WARNING: Default charset " + csn +
+                " not supported, using ISO-8859-1 instead\n");
             warnUnsupportedCharset = false;
         }
     }
@@ -341,10 +340,9 @@
         try {
             return decode("ISO-8859-1", ba, off, len);
         } catch (UnsupportedEncodingException x) {
-            // If this code is hit during VM initialization, MessageUtils is
+            // If this code is hit during VM initialization, err(String) is
             // the only way we will be able to get any kind of error message.
-            MessageUtils.err("ISO-8859-1 charset not available: "
-                             + x.toString());
+            err("ISO-8859-1 charset not available: " + x.toString() + "\n");
             // If we can not find ISO-8859-1 (a required encoding) then things
             // are seriously wrong with the installation.
             System.exit(1);
@@ -653,14 +651,20 @@
         try {
             return encode("ISO-8859-1", coder, val);
         } catch (UnsupportedEncodingException x) {
-            // If this code is hit during VM initialization, MessageUtils is
+            // If this code is hit during VM initialization, err(String) is
             // the only way we will be able to get any kind of error message.
-            MessageUtils.err("ISO-8859-1 charset not available: "
-                             + x.toString());
+            err("ISO-8859-1 charset not available: " + x.toString() + "\n");
             // If we can not find ISO-8859-1 (a required encoding) then things
             // are seriously wrong with the installation.
             System.exit(1);
             return null;
         }
     }
+
+    /**
+     *  Print a message directly to stderr, bypassing all character conversion
+     *  methods.
+     *  @param msg  message to print
+     */
+    private static native void err(String msg);
 }
diff --git a/jdk/src/java.base/share/classes/java/lang/System.java b/jdk/src/java.base/share/classes/java/lang/System.java
index ea3ad40..8ea7958 100644
--- a/jdk/src/java.base/share/classes/java/lang/System.java
+++ b/jdk/src/java.base/share/classes/java/lang/System.java
@@ -46,6 +46,7 @@
 import jdk.internal.HotSpotIntrinsicCandidate;
 import jdk.internal.misc.JavaLangAccess;;
 import jdk.internal.misc.SharedSecrets;;
+import jdk.internal.misc.VM;
 import jdk.internal.logger.LoggerFinderLoader;
 import jdk.internal.logger.LazyLoggers;
 import jdk.internal.logger.LocalizedLoggerWrapper;
@@ -1817,12 +1818,12 @@
         // removed from the system properties.
         //
         // See java.lang.Integer.IntegerCache and the
-        // sun.misc.VM.saveAndRemoveProperties method for example.
+        // VM.saveAndRemoveProperties method for example.
         //
         // Save a private copy of the system properties object that
         // can only be accessed by the internal implementation.  Remove
         // certain system properties that are not intended for public access.
-        sun.misc.VM.saveAndRemoveProperties(props);
+        VM.saveAndRemoveProperties(props);
 
 
         lineSeparator = props.getProperty("line.separator");
@@ -1846,7 +1847,7 @@
         // set for the class libraries. Currently this is no-op everywhere except
         // for Windows where the process-wide error mode is set before the java.io
         // classes are used.
-        sun.misc.VM.initializeOSEnvironment();
+        VM.initializeOSEnvironment();
 
         // The main thread is not added to its thread group in the same
         // way as other threads; we must do it ourselves here.
@@ -1857,10 +1858,10 @@
         setJavaLangAccess();
 
         // Subsystems that are invoked during initialization can invoke
-        // sun.misc.VM.isBooted() in order to avoid doing things that should
+        // VM.isBooted() in order to avoid doing things that should
         // wait until the application class loader has been set up.
         // IMPORTANT: Ensure that this remains the last initialization action!
-        sun.misc.VM.booted();
+        VM.booted();
     }
 
     private static void setJavaLangAccess() {
diff --git a/jdk/src/java.base/share/classes/java/lang/Thread.java b/jdk/src/java.base/share/classes/java/lang/Thread.java
index 56935ea..eb47a05 100644
--- a/jdk/src/java.base/share/classes/java/lang/Thread.java
+++ b/jdk/src/java.base/share/classes/java/lang/Thread.java
@@ -1869,7 +1869,7 @@
      */
     public State getState() {
         // get current thread state
-        return sun.misc.VM.toThreadState(threadStatus);
+        return jdk.internal.misc.VM.toThreadState(threadStatus);
     }
 
     // Added in JSR-166
diff --git a/jdk/src/java.base/share/classes/java/lang/ThreadGroup.java b/jdk/src/java.base/share/classes/java/lang/ThreadGroup.java
index eda2e7d..e477800 100644
--- a/jdk/src/java.base/share/classes/java/lang/ThreadGroup.java
+++ b/jdk/src/java.base/share/classes/java/lang/ThreadGroup.java
@@ -27,7 +27,7 @@
 
 import java.io.PrintStream;
 import java.util.Arrays;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 /**
  * A thread group represents a set of threads. In addition, a thread
diff --git a/jdk/src/java.base/share/classes/java/lang/Throwable.java b/jdk/src/java.base/share/classes/java/lang/Throwable.java
index 68dc204..9d5f547 100644
--- a/jdk/src/java.base/share/classes/java/lang/Throwable.java
+++ b/jdk/src/java.base/share/classes/java/lang/Throwable.java
@@ -24,7 +24,7 @@
  */
 
 package java.lang;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 import  java.io.*;
 import  java.util.*;
diff --git a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java
index 0c8317d..1448ded 100644
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandles.java
@@ -1836,7 +1836,7 @@
                 return false;
             }
             ClassLoader loader = defc.getClassLoader();
-            if (!sun.misc.VM.isSystemDomainLoader(loader)) {
+            if (!jdk.internal.misc.VM.isSystemDomainLoader(loader)) {
                 ClassLoader sysl = ClassLoader.getSystemClassLoader();
                 boolean found = false;
                 while (sysl != null) {
diff --git a/jdk/src/java.base/share/classes/java/lang/ref/Finalizer.java b/jdk/src/java.base/share/classes/java/lang/ref/Finalizer.java
index 221d07e..ead17ef 100644
--- a/jdk/src/java.base/share/classes/java/lang/ref/Finalizer.java
+++ b/jdk/src/java.base/share/classes/java/lang/ref/Finalizer.java
@@ -29,7 +29,7 @@
 import java.security.AccessController;
 import jdk.internal.misc.JavaLangAccess;
 import jdk.internal.misc.SharedSecrets;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 final class Finalizer extends FinalReference<Object> { /* Package-private; must be in
                                                           same package as the Reference
diff --git a/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java b/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java
index dcd50ae..61f4379 100644
--- a/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java
+++ b/jdk/src/java.base/share/classes/java/lang/ref/ReferenceQueue.java
@@ -26,6 +26,7 @@
 package java.lang.ref;
 
 import java.util.function.Consumer;
+import jdk.internal.misc.VM;
 
 /**
  * Reference queues, to which registered reference objects are appended by the
@@ -73,7 +74,7 @@
             // Volatiles ensure ordering.
             r.queue = ENQUEUED;
             if (r instanceof FinalReference) {
-                sun.misc.VM.addFinalRefCount(1);
+                VM.addFinalRefCount(1);
             }
             lock.notifyAll();
             return true;
@@ -93,7 +94,7 @@
             r.next = r;
             queueLength--;
             if (r instanceof FinalReference) {
-                sun.misc.VM.addFinalRefCount(-1);
+                VM.addFinalRefCount(-1);
             }
             return r;
         }
diff --git a/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java b/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java
index 765713a..f6c6ebd 100644
--- a/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Proxy.java
@@ -34,7 +34,7 @@
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.BiFunction;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 import sun.reflect.CallerSensitive;
 import sun.reflect.Reflection;
 import sun.reflect.misc.ReflectUtil;
diff --git a/jdk/src/java.base/share/classes/java/net/URI.java b/jdk/src/java.base/share/classes/java/net/URI.java
index e896568..9bf575b 100644
--- a/jdk/src/java.base/share/classes/java/net/URI.java
+++ b/jdk/src/java.base/share/classes/java/net/URI.java
@@ -2059,7 +2059,7 @@
 
         // 5.2 (2): Reference to current document (lone fragment)
         if ((child.scheme == null) && (child.authority == null)
-            && child.path.equals("") && (child.fragment != null)
+            && child.path.isEmpty() && (child.fragment != null)
             && (child.query == null)) {
             if ((base.fragment != null)
                 && child.fragment.equals(base.fragment)) {
@@ -2647,13 +2647,6 @@
     private static final long L_SCHEME = L_ALPHA | L_DIGIT | lowMask("+-.");
     private static final long H_SCHEME = H_ALPHA | H_DIGIT | highMask("+-.");
 
-    // uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
-    //                 "&" | "=" | "+" | "$" | ","
-    private static final long L_URIC_NO_SLASH
-        = L_UNRESERVED | L_ESCAPED | lowMask(";?:@&=+$,");
-    private static final long H_URIC_NO_SLASH
-        = H_UNRESERVED | H_ESCAPED | highMask(";?:@&=+$,");
-
     // scope_id = alpha | digit | "_" | "."
     private static final long L_SCOPE_ID
         = L_ALPHANUM | lowMask("_.");
@@ -2884,23 +2877,10 @@
 
         // -- Simple access to the input string --
 
-        // Return a substring of the input string
-        //
-        private String substring(int start, int end) {
-            return input.substring(start, end);
-        }
-
-        // Return the char at position p,
-        // assuming that p < input.length()
-        //
-        private char charAt(int p) {
-            return input.charAt(p);
-        }
-
         // Tells whether start < end and, if so, whether charAt(start) == c
         //
         private boolean at(int start, int end, char c) {
-            return (start < end) && (charAt(start) == c);
+            return (start < end) && (input.charAt(start) == c);
         }
 
         // Tells whether start + s.length() < end and, if so,
@@ -2913,7 +2893,7 @@
                 return false;
             int i = 0;
             while (i < sn) {
-                if (charAt(p++) != s.charAt(i)) {
+                if (input.charAt(p++) != s.charAt(i)) {
                     break;
                 }
                 i++;
@@ -2953,7 +2933,7 @@
         // start position.
         //
         private int scan(int start, int end, char c) {
-            if ((start < end) && (charAt(start) == c))
+            if ((start < end) && (input.charAt(start) == c))
                 return start + 1;
             return start;
         }
@@ -2968,7 +2948,7 @@
         private int scan(int start, int end, String err, String stop) {
             int p = start;
             while (p < end) {
-                char c = charAt(p);
+                char c = input.charAt(p);
                 if (err.indexOf(c) >= 0)
                     return -1;
                 if (stop.indexOf(c) >= 0)
@@ -2978,6 +2958,23 @@
             return p;
         }
 
+        // Scan forward from the given start position.  Stop at the first char
+        // in the stop string (in which case the index of the preceding char is
+        // returned), or the end of the input string (in which case the length
+        // of the input string is returned).  May return the start position if
+        // nothing matches.
+        //
+        private int scan(int start, int end, String stop) {
+            int p = start;
+            while (p < end) {
+                char c = input.charAt(p);
+                if (stop.indexOf(c) >= 0)
+                    break;
+                p++;
+            }
+            return p;
+        }
+
         // Scan a potential escape sequence, starting at the given position,
         // with the given first char (i.e., charAt(start) == c).
         //
@@ -2992,8 +2989,8 @@
             if (c == '%') {
                 // Process escape pair
                 if ((p + 3 <= n)
-                    && match(charAt(p + 1), L_HEX, H_HEX)
-                    && match(charAt(p + 2), L_HEX, H_HEX)) {
+                    && match(input.charAt(p + 1), L_HEX, H_HEX)
+                    && match(input.charAt(p + 2), L_HEX, H_HEX)) {
                     return p + 3;
                 }
                 fail("Malformed escape pair", p);
@@ -3013,7 +3010,7 @@
         {
             int p = start;
             while (p < n) {
-                char c = charAt(p);
+                char c = input.charAt(p);
                 if (match(c, lowMask, highMask)) {
                     p++;
                     continue;
@@ -3067,13 +3064,13 @@
                     failExpecting("scheme name", 0);
                 checkChar(0, L_ALPHA, H_ALPHA, "scheme name");
                 checkChars(1, p, L_SCHEME, H_SCHEME, "scheme name");
-                scheme = substring(0, p);
+                scheme = input.substring(0, p);
                 p++;                    // Skip ':'
                 ssp = p;
                 if (at(p, n, '/')) {
                     p = parseHierarchical(p, n);
                 } else {
-                    int q = scan(p, n, "", "#");
+                    int q = scan(p, n, "#");
                     if (q <= p)
                         failExpecting("scheme-specific part", p);
                     checkChars(p, q, L_URIC, H_URIC, "opaque part");
@@ -3083,10 +3080,10 @@
                 ssp = 0;
                 p = parseHierarchical(0, n);
             }
-            schemeSpecificPart = substring(ssp, p);
+            schemeSpecificPart = input.substring(ssp, p);
             if (at(p, n, '#')) {
                 checkChars(p + 1, n, L_URIC, H_URIC, "fragment");
-                fragment = substring(p + 1, n);
+                fragment = input.substring(p + 1, n);
                 p = n;
             }
             if (p < n)
@@ -3113,7 +3110,7 @@
             int p = start;
             if (at(p, n, '/') && at(p + 1, n, '/')) {
                 p += 2;
-                int q = scan(p, n, "", "/?#");
+                int q = scan(p, n, "/?#");
                 if (q > p) {
                     p = parseAuthority(p, q);
                 } else if (q < n) {
@@ -3122,15 +3119,15 @@
                 } else
                     failExpecting("authority", p);
             }
-            int q = scan(p, n, "", "?#"); // DEVIATION: May be empty
+            int q = scan(p, n, "?#"); // DEVIATION: May be empty
             checkChars(p, q, L_PATH, H_PATH, "path");
-            path = substring(p, q);
+            path = input.substring(p, q);
             p = q;
             if (at(p, n, '?')) {
                 p++;
-                q = scan(p, n, "", "#");
+                q = scan(p, n, "#");
                 checkChars(p, q, L_URIC, H_URIC, "query");
-                query = substring(p, q);
+                query = input.substring(p, q);
                 p = q;
             }
             return p;
@@ -3154,7 +3151,7 @@
             boolean serverChars;
             boolean regChars;
 
-            if (scan(p, n, "", "]") > p) {
+            if (scan(p, n, "]") > p) {
                 // contains a literal IPv6 address, therefore % is allowed
                 serverChars = (scan(p, n, L_SERVER_PERCENT, H_SERVER_PERCENT) == n);
             } else {
@@ -3164,7 +3161,7 @@
 
             if (regChars && !serverChars) {
                 // Must be a registry-based authority
-                authority = substring(p, n);
+                authority = input.substring(p, n);
                 return n;
             }
 
@@ -3176,7 +3173,7 @@
                     q = parseServer(p, n);
                     if (q < n)
                         failExpecting("end of authority", q);
-                    authority = substring(p, n);
+                    authority = input.substring(p, n);
                 } catch (URISyntaxException x) {
                     // Undo results of failed parse
                     userInfo = null;
@@ -3198,7 +3195,7 @@
             if (q < n) {
                 if (regChars) {
                     // Registry-based authority
-                    authority = substring(p, n);
+                    authority = input.substring(p, n);
                 } else if (ex != null) {
                     // Re-throw exception; it was probably due to
                     // a malformed IPv6 address
@@ -3224,7 +3221,7 @@
             q = scan(p, n, "/?#", "@");
             if ((q >= p) && at(q, n, '@')) {
                 checkChars(p, q, L_USERINFO, H_USERINFO, "user info");
-                userInfo = substring(p, q);
+                userInfo = input.substring(p, q);
                 p = q + 1;              // Skip '@'
             }
 
@@ -3235,7 +3232,7 @@
                 q = scan(p, n, "/?#", "]");
                 if ((q > p) && at(q, n, ']')) {
                     // look for a "%" scope id
-                    int r = scan (p, q, "", "%");
+                    int r = scan (p, q, "%");
                     if (r > p) {
                         parseIPv6Reference(p, r);
                         if (r+1 == q) {
@@ -3246,7 +3243,7 @@
                     } else {
                         parseIPv6Reference(p, q);
                     }
-                    host = substring(p-1, q+1);
+                    host = input.substring(p-1, q+1);
                     p = q + 1;
                 } else {
                     failExpecting("closing bracket for IPv6 address", q);
@@ -3261,7 +3258,7 @@
             // port
             if (at(p, n, ':')) {
                 p++;
-                q = scan(p, n, "", "/");
+                q = scan(p, n, "/");
                 if (q > p) {
                     checkChars(p, q, L_DIGIT, H_DIGIT, "port number");
                     try {
@@ -3361,13 +3358,13 @@
                 // IPv4 address is followed by something - check that
                 // it's a ":" as this is the only valid character to
                 // follow an address.
-                if (charAt(p) != ':') {
+                if (input.charAt(p) != ':') {
                     p = -1;
                 }
             }
 
             if (p > start)
-                host = substring(start, p);
+                host = input.substring(start, p);
 
             return p;
         }
@@ -3393,7 +3390,7 @@
                     p = q;
                     q = scan(p, n, L_ALPHANUM | L_DASH, H_ALPHANUM | H_DASH);
                     if (q > p) {
-                        if (charAt(q - 1) == '-')
+                        if (input.charAt(q - 1) == '-')
                             fail("Illegal character in hostname", q - 1);
                         p = q;
                     }
@@ -3412,11 +3409,11 @@
 
             // for a fully qualified hostname check that the rightmost
             // label starts with an alpha character.
-            if (l > start && !match(charAt(l), L_ALPHA, H_ALPHA)) {
+            if (l > start && !match(input.charAt(l), L_ALPHA, H_ALPHA)) {
                 fail("Illegal character in hostname", l);
             }
 
-            host = substring(start, p);
+            host = input.substring(start, p);
             return p;
         }
 
diff --git a/jdk/src/java.base/share/classes/java/net/URL.java b/jdk/src/java.base/share/classes/java/net/URL.java
index 73e4888..e8a6941 100644
--- a/jdk/src/java.base/share/classes/java/net/URL.java
+++ b/jdk/src/java.base/share/classes/java/net/URL.java
@@ -1242,7 +1242,7 @@
     private static ThreadLocal<Object> gate = new ThreadLocal<>();
 
     private static URLStreamHandler lookupViaProviders(final String protocol) {
-        if (!sun.misc.VM.isBooted())
+        if (!jdk.internal.misc.VM.isBooted())
             return null;
 
         if (gate.get() != null)
diff --git a/jdk/src/java.base/share/classes/java/net/URLConnection.java b/jdk/src/java.base/share/classes/java/net/URLConnection.java
index 0fe1827..87f4378 100644
--- a/jdk/src/java.base/share/classes/java/net/URLConnection.java
+++ b/jdk/src/java.base/share/classes/java/net/URLConnection.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -1567,6 +1567,11 @@
             }
         }
 
+        if ((c1 == 0x49 && c2 == 0x49 && c3 == 0x2a && c4 == 0x00)
+            || (c1 == 0x4d && c2 == 0x4d && c3 == 0x00 && c4 == 0x2a)) {
+            return "image/tiff";
+        }
+
         if (c1 == 0xD0 && c2 == 0xCF && c3 == 0x11 && c4 == 0xE0 &&
             c5 == 0xA1 && c6 == 0xB1 && c7 == 0x1A && c8 == 0xE1) {
 
diff --git a/jdk/src/java.base/share/classes/java/nio/Bits.java b/jdk/src/java.base/share/classes/java/nio/Bits.java
index 724fb0c..09623ea 100644
--- a/jdk/src/java.base/share/classes/java/nio/Bits.java
+++ b/jdk/src/java.base/share/classes/java/nio/Bits.java
@@ -31,7 +31,7 @@
 import jdk.internal.misc.JavaLangRefAccess;
 import jdk.internal.misc.SharedSecrets;
 import jdk.internal.misc.Unsafe;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 /**
  * Access to bits, native and otherwise.
diff --git a/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template b/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template
index c2d8d8e..16e495a 100644
--- a/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template
+++ b/jdk/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template
@@ -30,7 +30,7 @@
 import java.io.FileDescriptor;
 import sun.misc.Cleaner;
 import jdk.internal.misc.Unsafe;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 import sun.nio.ch.DirectBuffer;
 
 
diff --git a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java
index d48f5a9..de85b2f 100644
--- a/jdk/src/java.base/share/classes/java/nio/charset/Charset.java
+++ b/jdk/src/java.base/share/classes/java/nio/charset/Charset.java
@@ -43,6 +43,7 @@
 import java.util.ServiceConfigurationError;
 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;
@@ -281,7 +282,7 @@
     static boolean atBugLevel(String bl) {              // package-private
         String level = bugLevel;
         if (level == null) {
-            if (!sun.misc.VM.isBooted())
+            if (!VM.isBooted())
                 return false;
             bugLevel = level = AccessController.doPrivileged(
                 new GetPropertyAction("sun.nio.cs.bugLevel", ""));
@@ -394,7 +395,7 @@
         // that loader to be prematurely initialized with incomplete
         // information.
         //
-        if (!sun.misc.VM.isBooted())
+        if (!VM.isBooted())
             return null;
 
         if (gate.get() != null)
@@ -445,7 +446,7 @@
     }
 
     private static Charset lookupExtendedCharset(String charsetName) {
-        if (!sun.misc.VM.isBooted())  // see lookupViaProviders()
+        if (!VM.isBooted())  // see lookupViaProviders()
             return null;
         CharsetProvider[] ecps = ExtendedProviderHolder.extendedProviders;
         for (CharsetProvider cp : ecps) {
diff --git a/jdk/src/java.base/share/classes/java/time/Clock.java b/jdk/src/java.base/share/classes/java/time/Clock.java
index 0d02c52..121afa3 100644
--- a/jdk/src/java.base/share/classes/java/time/Clock.java
+++ b/jdk/src/java.base/share/classes/java/time/Clock.java
@@ -69,7 +69,7 @@
 import java.io.Serializable;
 import java.util.Objects;
 import java.util.TimeZone;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 /**
  * A clock providing access to the current instant, date and time using a time-zone.
diff --git a/jdk/src/java.base/share/classes/java/time/Duration.java b/jdk/src/java.base/share/classes/java/time/Duration.java
index 334bfa0..646d710 100644
--- a/jdk/src/java.base/share/classes/java/time/Duration.java
+++ b/jdk/src/java.base/share/classes/java/time/Duration.java
@@ -1194,6 +1194,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the whole seconds part of the length of the duration, positive or negative
+     * @since 9
      */
     public long toSeconds() {
         return seconds;
@@ -1243,6 +1244,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the number of days in the duration, may be negative
+     * @since 9
      */
     public long toDaysPart(){
         return seconds / SECONDS_PER_DAY;
@@ -1258,6 +1260,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the number of hours part in the duration, may be negative
+     * @since 9
      */
     public int toHoursPart(){
         return (int) (toHours() % 24);
@@ -1273,7 +1276,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the number of minutes parts in the duration, may be negative
-     * may be negative
+     * @since 9
      */
     public int toMinutesPart(){
         return (int) (toMinutes() % MINUTES_PER_HOUR);
@@ -1289,6 +1292,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the number of seconds parts in the duration, may be negative
+     * @since 9
      */
     public int toSecondsPart(){
         return (int) (seconds % SECONDS_PER_MINUTE);
@@ -1306,6 +1310,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the number of milliseconds part of the duration.
+     * @since 9
      */
     public int toMillisPart(){
         return nanos / 1000_000;
@@ -1322,6 +1327,7 @@
      * This instance is immutable and unaffected by this method call.
      *
      * @return the nanoseconds within the second part of the length of the duration, from 0 to 999,999,999
+     * @since 9
      */
     public int toNanosPart(){
         return nanos;
@@ -1385,7 +1391,7 @@
      * <p>
      * The format of the returned string will be {@code PTnHnMnS}, where n is
      * the relevant hours, minutes or seconds part of the duration.
-     * Any fractional seconds are placed after a decimal point i the seconds section.
+     * Any fractional seconds are placed after a decimal point in the seconds section.
      * If a section has a zero value, it is omitted.
      * The hours, minutes and seconds will all have the same sign.
      * <p>
@@ -1406,9 +1412,13 @@
         if (this == ZERO) {
             return "PT0S";
         }
-        long hours = seconds / SECONDS_PER_HOUR;
-        int minutes = (int) ((seconds % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
-        int secs = (int) (seconds % SECONDS_PER_MINUTE);
+        long effectiveTotalSecs = seconds;
+        if (seconds < 0 && nanos > 0) {
+            effectiveTotalSecs++;
+        }
+        long hours = effectiveTotalSecs / SECONDS_PER_HOUR;
+        int minutes = (int) ((effectiveTotalSecs % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
+        int secs = (int) (effectiveTotalSecs % SECONDS_PER_MINUTE);
         StringBuilder buf = new StringBuilder(24);
         buf.append("PT");
         if (hours != 0) {
@@ -1420,18 +1430,18 @@
         if (secs == 0 && nanos == 0 && buf.length() > 2) {
             return buf.toString();
         }
-        if (secs < 0 && nanos > 0) {
-            if (secs == -1) {
+        if (seconds < 0 && nanos > 0) {
+            if (secs == 0) {
                 buf.append("-0");
             } else {
-                buf.append(secs + 1);
+                buf.append(secs);
             }
         } else {
             buf.append(secs);
         }
         if (nanos > 0) {
             int pos = buf.length();
-            if (secs < 0) {
+            if (seconds < 0) {
                 buf.append(2 * NANOS_PER_SECOND - nanos);
             } else {
                 buf.append(nanos + NANOS_PER_SECOND);
diff --git a/jdk/src/java.base/share/classes/java/util/Calendar.java b/jdk/src/java.base/share/classes/java/util/Calendar.java
index 306362b..7665d84 100644
--- a/jdk/src/java.base/share/classes/java/util/Calendar.java
+++ b/jdk/src/java.base/share/classes/java/util/Calendar.java
@@ -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
@@ -2085,8 +2085,10 @@
 
         String calendarType = getCalendarType();
         int fieldValue = get(field);
-        // the standalone and narrow styles are supported only through CalendarDataProviders.
-        if (isStandaloneStyle(style) || isNarrowFormatStyle(style)) {
+        // the standalone/narrow styles and short era are supported only through
+        // CalendarNameProviders.
+        if (isStandaloneStyle(style) || isNarrowFormatStyle(style) ||
+            field == ERA && (style & SHORT) == SHORT) {
             String val = CalendarDataUtility.retrieveFieldValueName(calendarType,
                                                                     field, fieldValue,
                                                                     style, locale);
diff --git a/jdk/src/java.base/share/classes/java/util/JapaneseImperialCalendar.java b/jdk/src/java.base/share/classes/java/util/JapaneseImperialCalendar.java
index 6b12991..35c5009 100644
--- a/jdk/src/java.base/share/classes/java/util/JapaneseImperialCalendar.java
+++ b/jdk/src/java.base/share/classes/java/util/JapaneseImperialCalendar.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, 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
@@ -1037,14 +1037,16 @@
                 }
                 if (size < eras.length) {
                     int baseStyle = getBaseStyle(style);
-                    for (int i = size; i < eras.length; i++) {
-                        Era era = eras[i];
-                        if (baseStyle == ALL_STYLES || baseStyle == SHORT
-                                || baseStyle == NARROW_FORMAT) {
-                            names.put(era.getAbbreviation(), i);
-                        }
-                        if (baseStyle == ALL_STYLES || baseStyle == LONG) {
-                            names.put(era.getName(), i);
+                    for (int i = 0; i < eras.length; i++) {
+                        if (!names.values().contains(i)) {
+                            Era era = eras[i];
+                            if (baseStyle == ALL_STYLES || baseStyle == SHORT
+                                    || baseStyle == NARROW_FORMAT) {
+                                names.put(era.getAbbreviation(), i);
+                            }
+                            if (baseStyle == ALL_STYLES || baseStyle == LONG) {
+                                names.put(era.getName(), i);
+                            }
                         }
                     }
                 }
diff --git a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java
index 9d9a776..31ff8ea 100644
--- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java
+++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java
@@ -1251,7 +1251,7 @@
                     idx = getEntryNext(idx);
                 }
                 /* If not addSlash, or slash is already there, we are done */
-                if (!addSlash  || name[name.length - 1] == '/') {
+                if (!addSlash  || name.length == 0 || name[name.length - 1] == '/') {
                      return -1;
                 }
                 /* Add slash and try once more */
diff --git a/jdk/src/java.base/share/classes/jdk/Exported.java b/jdk/src/java.base/share/classes/jdk/Exported.java
deleted file mode 100644
index d67d8b3..0000000
--- a/jdk/src/java.base/share/classes/jdk/Exported.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2013, 2014, 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;
-
-import java.lang.annotation.*;
-
-/**
-  * Indicates whether or not a JDK specific type or package is an
-  * exported part of the JDK suitable for use outside of the JDK
-  * implementation itself.
-  *
-  * This annotation should only be applied to types and packages
-  * <em>outside</em> of the Java SE namespaces of {@code java.*} and
-  * {@code javax.*} packages.  For example, certain portions of {@code
-  * com.sun.*} are official parts of the JDK meant to be generally
-  * usable while other portions of {@code com.sun.*} are not.  This
-  * annotation type allows those portions to be easily and
-  * programmatically distinguished.
-  *
-  * <p>If in one release a type or package is
-  * <code>@Exported(true)</code>, in a subsequent major release such a
-  * type or package can transition to <code>@Exported(false)</code>.
-  *
-  * <p>If a type or package is <code>@Exported(false)</code> in a
-  * release, it may be removed in a subsequent major release.
-  *
-  * <p>If a top-level type has an <code>@Exported</code> annotation,
-  * any nested member types with the top-level type should have an
-  * <code>@Exported</code> annotation with the same value.
-  *
-  * (In exceptional cases, if a nested type is going to be removed
-  * before its enclosing type, the nested type's could be
-  * <code>@Exported(false)</code> while its enclosing type was
-  * <code>@Exported(true)</code>.)
-  *
-  * Likewise, if a package has an <code>@Exported</code> annotation,
-  * top-level types within that package should also have an
-  * <code>@Exported</code> annotation.
-  *
-  * Sometimes a top-level type may have a different
-  * <code>@Exported</code> value than its package.
-  *
-  * @since 1.8
-  */
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.PACKAGE})
-@Exported
-public @interface Exported {
-    /**
-     * Whether or not the annotated type or package is an exported
-     * part of the JDK.
-     * @return whether or not the annotated type or package is an exported
-     * part of the JDK
-     */
-    boolean value() default true;
-}
diff --git a/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java b/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java
index 813c478..bf2bccf 100644
--- a/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java
+++ b/jdk/src/java.base/share/classes/jdk/internal/logger/BootstrapLogger.java
@@ -48,7 +48,7 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import sun.misc.InnocuousThread;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 import sun.util.logging.PlatformLogger;
 import jdk.internal.logger.LazyLoggers.LazyLoggerAccessor;
 
diff --git a/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java b/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java
index c54fc1a..04b64ea 100644
--- a/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java
+++ b/jdk/src/java.base/share/classes/jdk/internal/logger/LazyLoggers.java
@@ -32,7 +32,7 @@
 import java.lang.System.Logger;
 import java.lang.ref.WeakReference;
 import java.util.Objects;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 import sun.util.logging.PlatformLogger;
 
 /**
diff --git a/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java
index 83bb4f3..9176784 100644
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/Unsafe.java
@@ -30,7 +30,7 @@
 
 import sun.reflect.CallerSensitive;
 import sun.reflect.Reflection;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 import jdk.internal.HotSpotIntrinsicCandidate;
 
diff --git a/jdk/src/java.base/share/classes/sun/misc/VM.java b/jdk/src/java.base/share/classes/jdk/internal/misc/VM.java
similarity index 99%
rename from jdk/src/java.base/share/classes/sun/misc/VM.java
rename to jdk/src/java.base/share/classes/jdk/internal/misc/VM.java
index 4c83dfa..04af46a 100644
--- a/jdk/src/java.base/share/classes/sun/misc/VM.java
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/VM.java
@@ -23,7 +23,7 @@
  * questions.
  */
 
-package sun.misc;
+package jdk.internal.misc;
 
 import static java.lang.Thread.State.*;
 import java.util.Properties;
diff --git a/jdk/src/java.base/share/classes/sun/misc/VMNotification.java b/jdk/src/java.base/share/classes/jdk/internal/misc/VMNotification.java
similarity index 98%
rename from jdk/src/java.base/share/classes/sun/misc/VMNotification.java
rename to jdk/src/java.base/share/classes/jdk/internal/misc/VMNotification.java
index bf4abef..3c7ad9b 100644
--- a/jdk/src/java.base/share/classes/sun/misc/VMNotification.java
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/VMNotification.java
@@ -23,7 +23,7 @@
  * questions.
  */
 
-package sun.misc;
+package jdk.internal.misc;
 
 /** @deprecated */
 @Deprecated
diff --git a/jdk/src/java.base/share/classes/jdk/net/ExtendedSocketOptions.java b/jdk/src/java.base/share/classes/jdk/net/ExtendedSocketOptions.java
index a44560b..12af5af 100644
--- a/jdk/src/java.base/share/classes/jdk/net/ExtendedSocketOptions.java
+++ b/jdk/src/java.base/share/classes/jdk/net/ExtendedSocketOptions.java
@@ -34,7 +34,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public final class ExtendedSocketOptions {
 
     private static class ExtSocketOption<T> implements SocketOption<T> {
diff --git a/jdk/src/java.base/share/classes/jdk/net/NetworkPermission.java b/jdk/src/java.base/share/classes/jdk/net/NetworkPermission.java
index df740da..285f305 100644
--- a/jdk/src/java.base/share/classes/jdk/net/NetworkPermission.java
+++ b/jdk/src/java.base/share/classes/jdk/net/NetworkPermission.java
@@ -61,7 +61,6 @@
  * @since 1.8
  */
 
-@jdk.Exported
 public final class NetworkPermission extends BasicPermission {
 
     private static final long serialVersionUID = -2012939586906722291L;
diff --git a/jdk/src/java.base/share/classes/jdk/net/SocketFlow.java b/jdk/src/java.base/share/classes/jdk/net/SocketFlow.java
index 3d673d1..12d1ed3 100644
--- a/jdk/src/java.base/share/classes/jdk/net/SocketFlow.java
+++ b/jdk/src/java.base/share/classes/jdk/net/SocketFlow.java
@@ -45,7 +45,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public class SocketFlow {
 
     private static final int UNSET = -1;
@@ -68,7 +67,6 @@
      *
      * @since 1.8
      */
-    @jdk.Exported
     public enum Status {
         /**
          * Set or get socket option has not been called yet. Status
diff --git a/jdk/src/java.base/share/classes/jdk/net/Sockets.java b/jdk/src/java.base/share/classes/jdk/net/Sockets.java
index bf096c0..1ba53f2 100644
--- a/jdk/src/java.base/share/classes/jdk/net/Sockets.java
+++ b/jdk/src/java.base/share/classes/jdk/net/Sockets.java
@@ -55,7 +55,6 @@
  *
  * @see java.nio.channels.NetworkChannel
  */
-@jdk.Exported
 public class Sockets {
 
     private static final HashMap<Class<?>,Set<SocketOption<?>>>
diff --git a/jdk/src/java.base/share/classes/jdk/net/package-info.java b/jdk/src/java.base/share/classes/jdk/net/package-info.java
index fd824f6..97b3ef1 100644
--- a/jdk/src/java.base/share/classes/jdk/net/package-info.java
+++ b/jdk/src/java.base/share/classes/jdk/net/package-info.java
@@ -30,5 +30,4 @@
  * @since 1.8
  */
 
-@jdk.Exported
 package jdk.net;
diff --git a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java
index 5845979..3f9e366 100644
--- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java
+++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java
@@ -66,6 +66,7 @@
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
+import jdk.internal.misc.VM;
 
 public enum LauncherHelper {
     INSTANCE;
@@ -86,9 +87,9 @@
     private static final String PROP_SETTINGS   = "Property settings:";
     private static final String LOCALE_SETTINGS = "Locale settings:";
 
-    // sync with java.c and sun.misc.VM
+    // sync with java.c and jdk.internal.misc.VM
     private static final String diagprop = "sun.java.launcher.diag";
-    static final boolean trace = sun.misc.VM.getSavedProperty(diagprop) != null;
+    static final boolean trace = VM.getSavedProperty(diagprop) != null;
 
     private static final String defaultBundleName =
             "sun.launcher.resources.launcher";
diff --git a/jdk/src/java.base/share/classes/sun/misc/MessageUtils.java b/jdk/src/java.base/share/classes/sun/misc/MessageUtils.java
deleted file mode 100644
index 75d5ee4..0000000
--- a/jdk/src/java.base/share/classes/sun/misc/MessageUtils.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 1995, 2000, 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;
-
-/**
- * MessageUtils: miscellaneous utilities for handling error and status
- * properties and messages.
- *
- * @author Herb Jellinek
- */
-
-public class MessageUtils {
-    // can instantiate it for to allow less verbose use - via instance
-    // instead of classname
-
-    public MessageUtils() { }
-
-    public static String subst(String patt, String arg) {
-        String args[] = { arg };
-        return subst(patt, args);
-    }
-
-    public static String subst(String patt, String arg1, String arg2) {
-        String args[] = { arg1, arg2 };
-        return subst(patt, args);
-    }
-
-    public static String subst(String patt, String arg1, String arg2,
-                               String arg3) {
-        String args[] = { arg1, arg2, arg3 };
-        return subst(patt, args);
-    }
-
-    public static String subst(String patt, String args[]) {
-        StringBuilder result = new StringBuilder();
-        int len = patt.length();
-        for (int i = 0; i >= 0 && i < len; i++) {
-            char ch = patt.charAt(i);
-            if (ch == '%') {
-                if (i != len) {
-                    int index = Character.digit(patt.charAt(i + 1), 10);
-                    if (index == -1) {
-                        result.append(patt.charAt(i + 1));
-                        i++;
-                    } else if (index < args.length) {
-                        result.append(args[index]);
-                        i++;
-                    }
-                }
-            } else {
-                result.append(ch);
-            }
-        }
-        return result.toString();
-    }
-
-    public static String substProp(String propName, String arg) {
-        return subst(System.getProperty(propName), arg);
-    }
-
-    public static String substProp(String propName, String arg1, String arg2) {
-        return subst(System.getProperty(propName), arg1, arg2);
-    }
-
-    public static String substProp(String propName, String arg1, String arg2,
-                                   String arg3) {
-        return subst(System.getProperty(propName), arg1, arg2, arg3);
-    }
-
-    /**
-     *  Print a message directly to stderr, bypassing all the
-     *  character conversion methods.
-     *  @param msg   message to print
-     */
-    public static native void toStderr(String msg);
-
-    /**
-     *  Print a message directly to stdout, bypassing all the
-     *  character conversion methods.
-     *  @param msg   message to print
-     */
-    public static native void toStdout(String msg);
-
-
-    // Short forms of the above
-
-    public static void err(String s) {
-        toStderr(s + "\n");
-    }
-
-    public static void out(String s) {
-        toStdout(s + "\n");
-    }
-
-    // Print a stack trace to stderr
-    //
-    public static void where() {
-        Throwable t = new Throwable();
-        StackTraceElement[] es = t.getStackTrace();
-        for (int i = 1; i < es.length; i++)
-            toStderr("\t" + es[i].toString() + "\n");
-    }
-
-}
diff --git a/jdk/src/java.base/share/classes/sun/misc/Unsafe.java b/jdk/src/java.base/share/classes/sun/misc/Unsafe.java
index 6a4775a..e07dc31 100644
--- a/jdk/src/java.base/share/classes/sun/misc/Unsafe.java
+++ b/jdk/src/java.base/share/classes/sun/misc/Unsafe.java
@@ -32,6 +32,7 @@
 import sun.reflect.Reflection;
 
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
 
 
 /**
diff --git a/jdk/src/java.base/share/classes/sun/nio/ch/Util.java b/jdk/src/java.base/share/classes/sun/nio/ch/Util.java
index bb8df72..3b8d814 100644
--- a/jdk/src/java.base/share/classes/sun/nio/ch/Util.java
+++ b/jdk/src/java.base/share/classes/sun/nio/ch/Util.java
@@ -389,7 +389,7 @@
 
     static boolean atBugLevel(String bl) {              // package-private
         if (bugLevel == null) {
-            if (!sun.misc.VM.isBooted())
+            if (!jdk.internal.misc.VM.isBooted())
                 return false;
             String value = AccessController.doPrivileged(
                 new GetPropertyAction("sun.nio.ch.bugLevel"));
diff --git a/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template b/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template
index 63a5dc6..dd4d399 100644
--- a/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template
@@ -156,12 +156,12 @@
 
     private boolean initialized = false;
 
-    /*   provider the sun.nio.cs.map property fir sjis/ms932 mapping hack 
+    /*   provider the sun.nio.cs.map property fir sjis/ms932 mapping hack
      */
     private void init() {
         if (initialized)
             return;
-        if (!sun.misc.VM.isBooted())
+        if (!jdk.internal.misc.VM.isBooted())
             return;
         initialized = true;
 
diff --git a/jdk/src/java.base/share/classes/sun/reflect/Reflection.java b/jdk/src/java.base/share/classes/sun/reflect/Reflection.java
index c7c8ded..07ff364 100644
--- a/jdk/src/java.base/share/classes/sun/reflect/Reflection.java
+++ b/jdk/src/java.base/share/classes/sun/reflect/Reflection.java
@@ -29,6 +29,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.misc.VM;
 
 /** Common utility routines used by both java.lang and
     java.lang.reflect */
@@ -335,7 +336,7 @@
      */
     public static boolean isCallerSensitive(Method m) {
         final ClassLoader loader = m.getDeclaringClass().getClassLoader();
-        if (sun.misc.VM.isSystemDomainLoader(loader) || isExtClassLoader(loader))  {
+        if (VM.isSystemDomainLoader(loader) || isExtClassLoader(loader))  {
             return m.isAnnotationPresent(CallerSensitive.class);
         }
         return false;
diff --git a/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java b/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java
index 1bc3a04..a6e4995 100644
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java
@@ -417,14 +417,12 @@
             supports(HashAlgorithm.SHA1,        SignatureAlgorithm.ECDSA,
                     "SHA1withECDSA",        --p);
 
-            if (Security.getProvider("SunMSCAPI") == null) {
             supports(HashAlgorithm.SHA224,      SignatureAlgorithm.DSA,
                     "SHA224withDSA",        --p);
             supports(HashAlgorithm.SHA224,      SignatureAlgorithm.RSA,
                     "SHA224withRSA",        --p);
             supports(HashAlgorithm.SHA224,      SignatureAlgorithm.ECDSA,
                     "SHA224withECDSA",      --p);
-            }
 
             supports(HashAlgorithm.SHA256,      SignatureAlgorithm.DSA,
                     "SHA256withDSA",        --p);
diff --git a/jdk/src/java.base/share/native/libjava/RandomAccessFile.c b/jdk/src/java.base/share/native/libjava/RandomAccessFile.c
index a44d8f3..4c02741 100644
--- a/jdk/src/java.base/share/native/libjava/RandomAccessFile.c
+++ b/jdk/src/java.base/share/native/libjava/RandomAccessFile.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -103,23 +103,19 @@
 
 JNIEXPORT jlong JNICALL
 Java_java_io_RandomAccessFile_length(JNIEnv *env, jobject this) {
+
     FD fd;
-    jlong cur = jlong_zero;
-    jlong end = jlong_zero;
+    jlong length = jlong_zero;
 
     fd = GET_FD(this, raf_fd);
     if (fd == -1) {
         JNU_ThrowIOException(env, "Stream Closed");
         return -1;
     }
-    if ((cur = IO_Lseek(fd, 0L, SEEK_CUR)) == -1) {
-        JNU_ThrowIOExceptionWithLastError(env, "Seek failed");
-    } else if ((end = IO_Lseek(fd, 0L, SEEK_END)) == -1) {
-        JNU_ThrowIOExceptionWithLastError(env, "Seek failed");
-    } else if (IO_Lseek(fd, cur, SEEK_SET) == -1) {
-        JNU_ThrowIOExceptionWithLastError(env, "Seek failed");
+    if ((length = IO_GetLength(fd)) == -1) {
+        JNU_ThrowIOExceptionWithLastError(env, "GetLength failed");
     }
-    return end;
+    return length;
 }
 
 JNIEXPORT void JNICALL
diff --git a/jdk/src/java.base/share/native/libjava/MessageUtils.c b/jdk/src/java.base/share/native/libjava/StringCoding.c
similarity index 86%
rename from jdk/src/java.base/share/native/libjava/MessageUtils.c
rename to jdk/src/java.base/share/native/libjava/StringCoding.c
index 49315dc..9ca51cd 100644
--- a/jdk/src/java.base/share/native/libjava/MessageUtils.c
+++ b/jdk/src/java.base/share/native/libjava/StringCoding.c
@@ -26,11 +26,10 @@
 #include <stdlib.h>
 #include <jni.h>
 #include <jni_util.h>
-#include <jlong.h>
 #include <stdio.h>
 #include <jvm.h>
 
-#include "sun_misc_MessageUtils.h"
+#include "java_lang_StringCoding.h"
 
 static void
 printToFile(JNIEnv *env, jstring s, FILE *file)
@@ -41,8 +40,8 @@
     const jchar *sAsArray;
 
     if (s == NULL) {
-      s = (*env)->NewStringUTF(env, "null");
-      if (s == NULL) return;
+        JNU_ThrowNullPointerException(env, NULL);
+        return;
     }
 
     sAsArray = (*env)->GetStringChars(env, s, NULL);
@@ -70,13 +69,7 @@
 }
 
 JNIEXPORT void JNICALL
-Java_sun_misc_MessageUtils_toStderr(JNIEnv *env, jclass cls, jstring s)
+Java_java_lang_StringCoding_err(JNIEnv *env, jclass cls, jstring s)
 {
     printToFile(env, s, stderr);
 }
-
-JNIEXPORT void JNICALL
-Java_sun_misc_MessageUtils_toStdout(JNIEnv *env, jclass cls, jstring s)
-{
-    printToFile(env, s, stdout);
-}
diff --git a/jdk/src/java.base/share/native/libjava/VM.c b/jdk/src/java.base/share/native/libjava/VM.c
index 440ed45..61bae65 100644
--- a/jdk/src/java.base/share/native/libjava/VM.c
+++ b/jdk/src/java.base/share/native/libjava/VM.c
@@ -28,7 +28,7 @@
 #include "jvm.h"
 #include "jdk_util.h"
 
-#include "sun_misc_VM.h"
+#include "jdk_internal_misc_VM.h"
 
 /* Only register the performance-critical methods */
 static JNINativeMethod methods[] = {
@@ -36,12 +36,12 @@
 };
 
 JNIEXPORT jobject JNICALL
-Java_sun_misc_VM_latestUserDefinedLoader(JNIEnv *env, jclass cls) {
+Java_jdk_internal_misc_VM_latestUserDefinedLoader(JNIEnv *env, jclass cls) {
     return JVM_LatestUserDefinedLoader(env);
 }
 
 JNIEXPORT void JNICALL
-Java_sun_misc_VM_initialize(JNIEnv *env, jclass cls) {
+Java_jdk_internal_misc_VM_initialize(JNIEnv *env, jclass cls) {
     if (!JDK_InitJvmHandle()) {
         JNU_ThrowInternalError(env, "Handle for JVM not found for symbol lookup");
         return;
@@ -50,8 +50,8 @@
     // Registers implementations of native methods described in methods[]
     // above.
     // In particular, registers JVM_GetNanoTimeAdjustment as the implementation
-    // of the native sun.misc.VM.getNanoTimeAdjustment - avoiding the cost of
-    // introducing a Java_sun_misc_VM_getNanoTimeAdjustment  wrapper
+    // of the native VM.getNanoTimeAdjustment - avoiding the cost of
+    // introducing a Java_jdk_internal_misc_VM_getNanoTimeAdjustment wrapper
     (*env)->RegisterNatives(env, cls,
                             methods, sizeof(methods)/sizeof(methods[0]));
 }
diff --git a/jdk/src/java.base/unix/classes/sun/misc/OSEnvironment.java b/jdk/src/java.base/unix/classes/jdk/internal/misc/OSEnvironment.java
similarity index 92%
rename from jdk/src/java.base/unix/classes/sun/misc/OSEnvironment.java
rename to jdk/src/java.base/unix/classes/jdk/internal/misc/OSEnvironment.java
index 5004fd1..506273a 100644
--- a/jdk/src/java.base/unix/classes/sun/misc/OSEnvironment.java
+++ b/jdk/src/java.base/unix/classes/jdk/internal/misc/OSEnvironment.java
@@ -23,12 +23,12 @@
  * questions.
  */
 
-package sun.misc;
+package jdk.internal.misc;
 
 public class OSEnvironment {
 
     /*
-     * Initialize any miscellenous operating system settings that need to be set
+     * Initialize any miscellaneous operating system settings that need to be set
      * for the class libraries.
      */
     public static void initialize() {
diff --git a/jdk/src/java.base/unix/native/libjava/VM_md.c b/jdk/src/java.base/unix/native/libjava/VM_md.c
index 48a8e4a..fc6edf0 100644
--- a/jdk/src/java.base/unix/native/libjava/VM_md.c
+++ b/jdk/src/java.base/unix/native/libjava/VM_md.c
@@ -28,25 +28,25 @@
 
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getuid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getuid(JNIEnv *env, jclass thisclass) {
 
     return getuid();
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_geteuid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_geteuid(JNIEnv *env, jclass thisclass) {
 
     return geteuid();
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getgid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getgid(JNIEnv *env, jclass thisclass) {
 
     return getgid();
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getegid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getegid(JNIEnv *env, jclass thisclass) {
 
     return getegid();
 }
diff --git a/jdk/src/java.base/unix/native/libjava/io_util_md.c b/jdk/src/java.base/unix/native/libjava/io_util_md.c
index ff7b9b8..0b2141b 100644
--- a/jdk/src/java.base/unix/native/libjava/io_util_md.c
+++ b/jdk/src/java.base/unix/native/libjava/io_util_md.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -22,7 +22,6 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-
 #include "jni.h"
 #include "jni_util.h"
 #include "jvm.h"
@@ -219,3 +218,14 @@
     RESTARTABLE(ftruncate64(fd, length), result);
     return result;
 }
+
+jlong
+handleGetLength(FD fd)
+{
+    struct stat64 sb;
+    if (fstat64(fd, &sb) == 0) {
+        return sb.st_size;
+    } else {
+        return -1;
+    }
+}
diff --git a/jdk/src/java.base/unix/native/libjava/io_util_md.h b/jdk/src/java.base/unix/native/libjava/io_util_md.h
index b7b2573..f99b4a3 100644
--- a/jdk/src/java.base/unix/native/libjava/io_util_md.h
+++ b/jdk/src/java.base/unix/native/libjava/io_util_md.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -39,7 +39,7 @@
 ssize_t handleRead(FD fd, void *buf, jint len);
 jint handleAvailable(FD fd, jlong *pbytes);
 jint handleSetLength(FD fd, jlong length);
-
+jlong handleGetLength(FD fd);
 FD handleOpen(const char *path, int oflag, int mode);
 
 /*
@@ -72,6 +72,7 @@
 #define IO_Append handleWrite
 #define IO_Available handleAvailable
 #define IO_SetLength handleSetLength
+#define IO_GetLength handleGetLength
 
 #ifdef _ALLBSD_SOURCE
 #define open64 open
diff --git a/jdk/src/java.base/unix/native/libnio/ch/NativeThread.c b/jdk/src/java.base/unix/native/libnio/ch/NativeThread.c
index 5e2a78b..fd20eef 100644
--- a/jdk/src/java.base/unix/native/libnio/ch/NativeThread.c
+++ b/jdk/src/java.base/unix/native/libnio/ch/NativeThread.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -93,6 +93,10 @@
 #else
     ret = pthread_kill((pthread_t)thread, INTERRUPT_SIGNAL);
 #endif
+#ifdef MACOSX
+    if (ret != 0 && ret != ESRCH)
+#else
     if (ret != 0)
+#endif
         JNU_ThrowIOExceptionWithLastError(env, "Thread signal failed");
 }
diff --git a/jdk/src/java.base/windows/classes/sun/misc/OSEnvironment.java b/jdk/src/java.base/windows/classes/jdk/internal/misc/OSEnvironment.java
similarity index 92%
rename from jdk/src/java.base/windows/classes/sun/misc/OSEnvironment.java
rename to jdk/src/java.base/windows/classes/jdk/internal/misc/OSEnvironment.java
index 0e3cc4f..ffc8cf4 100644
--- a/jdk/src/java.base/windows/classes/sun/misc/OSEnvironment.java
+++ b/jdk/src/java.base/windows/classes/jdk/internal/misc/OSEnvironment.java
@@ -23,14 +23,14 @@
  * questions.
  */
 
-package sun.misc;
+package jdk.internal.misc;
 
 import sun.io.Win32ErrorMode;
 
 public class OSEnvironment {
 
     /*
-     * Initialize any miscellenous operating system settings that need to be set
+     * Initialize any miscellaneous operating system settings that need to be set
      * for the class libraries.
      * <p>
      * At this time only the process-wide error mode needs to be set.
diff --git a/jdk/src/java.base/windows/classes/sun/io/Win32ErrorMode.java b/jdk/src/java.base/windows/classes/sun/io/Win32ErrorMode.java
index 18626a7..324a04d 100644
--- a/jdk/src/java.base/windows/classes/sun/io/Win32ErrorMode.java
+++ b/jdk/src/java.base/windows/classes/sun/io/Win32ErrorMode.java
@@ -66,7 +66,7 @@
      * has completed.
      */
     public static void initialize() {
-        if (!sun.misc.VM.isBooted()) {
+        if (!jdk.internal.misc.VM.isBooted()) {
             String s = System.getProperty("sun.io.allowCriticalErrorMessageBox");
             if (s == null || s.equals(Boolean.FALSE.toString())) {
                 long mode = setErrorMode(0);
diff --git a/jdk/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java b/jdk/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java
index 537885a..71e999f 100644
--- a/jdk/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java
+++ b/jdk/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -38,8 +38,10 @@
 import java.util.Calendar;
 import java.util.Collections;
 import java.util.Currency;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Locale;
+import java.util.Map;
 import java.util.ResourceBundle.Control;
 import java.util.Set;
 import java.util.TimeZone;
@@ -47,6 +49,7 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicReferenceArray;
 import java.util.spi.CalendarDataProvider;
+import java.util.spi.CalendarNameProvider;
 import java.util.spi.CurrencyNameProvider;
 import java.util.spi.LocaleNameProvider;
 import sun.util.spi.CalendarProvider;
@@ -81,6 +84,9 @@
     private static final int DN_LOCALE_REGION   = 4;
     private static final int DN_LOCALE_VARIANT  = 5;
 
+    // Windows Calendar IDs
+    private static final int CAL_JAPAN  = 3;
+
     // Native Calendar ID to LDML calendar type map
     private static final String[] calIDToLDML = {
         "",
@@ -95,7 +101,8 @@
         "gregory_fr",
         "gregory_ar",
         "gregory_en",
-        "gregory_fr",
+        "gregory_fr", "", "", "", "", "", "", "", "", "", "",
+        "islamic-umalqura",
     };
 
     // Caches
@@ -362,6 +369,50 @@
         };
     }
 
+    public static CalendarNameProvider getCalendarNameProvider() {
+        return new CalendarNameProvider() {
+            @Override
+            public Locale[] getAvailableLocales() {
+                return getSupportedCalendarLocales();
+            }
+
+            @Override
+            public boolean isSupportedLocale(Locale locale) {
+                return isSupportedCalendarLocale(locale);
+            }
+
+            @Override
+            public String getDisplayName(String calendarType, int field,
+                int value, int style, Locale locale) {
+                String[] names = getCalendarDisplayStrings(removeExtensions(locale).toLanguageTag(),
+                            getCalendarIDFromLDMLType(calendarType), field, style);
+                if (names != null && value >= 0 && value < names.length) {
+                    return names[value];
+                } else {
+                    return null;
+                }
+            }
+
+            @Override
+            public Map<String, Integer> getDisplayNames(String calendarType,
+                int field, int style, Locale locale) {
+                Map<String, Integer> map = null;
+                String[] names = getCalendarDisplayStrings(removeExtensions(locale).toLanguageTag(),
+                            getCalendarIDFromLDMLType(calendarType), field, style);
+                if (names != null) {
+                    map = new HashMap<>();
+                    for (int value = 0; value < names.length; value++) {
+                        if (names[value] != null) {
+                            map.put(names[value], value);
+                        }
+                    }
+                    map = map.isEmpty() ? null : map;
+                }
+                return map;
+            }
+        };
+    }
+
     public static CalendarProvider getCalendarProvider() {
         return new CalendarProvider() {
             @Override
@@ -496,15 +547,7 @@
     }
 
     private static boolean isSupportedCalendarLocale(Locale locale) {
-        Locale base = locale;
-
-        if (base.hasExtensions() || base.getVariant() != "") {
-            // strip off extensions and variant.
-            base = new Locale.Builder()
-                            .setLocale(locale)
-                            .clearExtensions()
-                            .build();
-        }
+        Locale base = stripVariantAndExtensions(locale);
 
         if (!supportedLocaleSet.contains(base)) {
             return false;
@@ -569,11 +612,23 @@
     }
 
     private static boolean isJapaneseCalendar() {
-        return getCalendarID("ja-JP") == 3; // 3: CAL_JAPAN
+        return getCalendarID("ja-JP") == CAL_JAPAN;
+    }
+
+    private static Locale stripVariantAndExtensions(Locale locale) {
+        if (locale.hasExtensions() || locale.getVariant() != "") {
+            // strip off extensions and variant.
+            locale = new Locale.Builder()
+                            .setLocale(locale)
+                            .clearExtensions()
+                            .build();
+        }
+
+        return locale;
     }
 
     private static Locale getCalendarLocale(Locale locale) {
-        int calid = getCalendarID(locale.toLanguageTag());
+        int calid = getCalendarID(stripVariantAndExtensions(locale).toLanguageTag());
         if (calid > 0 && calid < calIDToLDML.length) {
             Locale.Builder lb = new Locale.Builder();
             String[] caltype = calIDToLDML[calid].split("_");
@@ -589,6 +644,15 @@
         return locale;
     }
 
+    private static int getCalendarIDFromLDMLType(String ldmlType) {
+        for (int i = 0; i < calIDToLDML.length; i++) {
+            if (calIDToLDML[i].startsWith(ldmlType)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
     private static Locale getNumberLocale(Locale src) {
         if (JRELocaleConstants.TH_TH.equals(src)) {
             if (isNativeDigit("th-TH")) {
@@ -639,6 +703,9 @@
     // For CalendarDataProvider
     private static native int getCalendarDataValue(String langTag, int type);
 
+    // For CalendarNameProvider
+    private static native String[] getCalendarDisplayStrings(String langTag, int calid, int field, int style);
+
     // For Locale/CurrencyNameProvider
     private static native String getDisplayString(String langTag, int key, String value);
 }
diff --git a/jdk/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c b/jdk/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c
index f5540d7..28663f7 100644
--- a/jdk/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c
+++ b/jdk/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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,22 +31,33 @@
 
 #define BUFLEN 256
 
+// java.util.Calendar constants
+#define CALENDAR_FIELD_ERA              0           // Calendar.ERA
+#define CALENDAR_FIELD_MONTH            2           // Calendar.MONTH
+#define CALENDAR_STYLE_SHORT_MASK       0x00000001  // Calendar.SHORT
+#define CALENDAR_STYLE_STANDALONE_MASK  0x00008000  // Calendar.STANDALONE
+
 // global variables
 typedef int (WINAPI *PGLIE)(const jchar *, LCTYPE, LPWSTR, int);
 typedef int (WINAPI *PGCIE)(const jchar *, CALID, LPCWSTR, CALTYPE, LPWSTR, int, LPDWORD);
+typedef int (WINAPI *PECIEE)(CALINFO_ENUMPROCEXEX, const jchar *, CALID, LPCWSTR, CALTYPE, LPARAM);
 PGLIE pGetLocaleInfoEx;
 PGCIE pGetCalendarInfoEx;
+PECIEE pEnumCalendarInfoExEx;
 BOOL initialized = FALSE;
 
 // prototypes
 int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen);
 int getCalendarInfoWrapper(const jchar *langtag, CALID id, LPCWSTR reserved, CALTYPE type, LPWSTR data, int buflen, LPDWORD val);
 jint getCalendarID(const jchar *langtag);
-void replaceCalendarArrayElems(JNIEnv *env, jstring jlangtag, jobjectArray jarray,
-                       CALTYPE* pCalTypes, int offset, int length);
+void replaceCalendarArrayElems(JNIEnv *env, jstring jlangtag, jint calid, jobjectArray jarray,
+                       CALTYPE* pCalTypes, int offset, int length, int style);
 WCHAR * getNumberPattern(const jchar * langtag, const jint numberStyle);
 void getNumberPart(const jchar * langtag, const jint numberStyle, WCHAR * number);
 void getFixPart(const jchar * langtag, const jint numberStyle, BOOL positive, BOOL prefix, WCHAR * ret);
+int enumCalendarInfoWrapper(const jchar * langtag, CALID calid, CALTYPE type, LPWSTR buf, int buflen);
+BOOL CALLBACK EnumCalendarInfoProc(LPWSTR lpCalInfoStr, CALID calid, LPWSTR lpReserved, LPARAM lParam);
+jobjectArray getErasImpl(JNIEnv *env, jstring jlangtag, jint calid, jint style, jobjectArray eras);
 
 // from java_props_md.c
 extern __declspec(dllexport) const char * getJavaIDFromLangID(LANGID langID);
@@ -83,6 +94,8 @@
     CAL_SABBREVMONTHNAME13,
 };
 
+#define MONTHTYPES (sizeof(monthsType) / sizeof(CALTYPE))
+
 CALTYPE wDaysType[] = {
     CAL_SDAYNAME7,
     CAL_SDAYNAME1,
@@ -155,6 +168,11 @@
     }
 };
 
+
+// Localized region name for unknown regions (Windows 10)
+#define UNKNOWN_REGION  L"Unknown Region ("
+#define UNKNOWN_REGION_SIZE wcslen(UNKNOWN_REGION)
+
 /*
  * Class:     sun_util_locale_provider_HostLocaleProviderAdapterImpl
  * Method:    initialize
@@ -169,11 +187,15 @@
         pGetCalendarInfoEx = (PGCIE)GetProcAddress(
             GetModuleHandle("kernel32.dll"),
             "GetCalendarInfoEx");
+        pEnumCalendarInfoExEx = (PECIEE)GetProcAddress(
+            GetModuleHandle("kernel32.dll"),
+            "EnumCalendarInfoExEx");
         initialized =TRUE;
     }
 
     return pGetLocaleInfoEx != NULL &&
-           pGetCalendarInfoEx != NULL;
+           pGetCalendarInfoEx != NULL &&
+           pEnumCalendarInfoExEx != NULL;
 }
 
 /*
@@ -300,23 +322,7 @@
  */
 JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getEras
   (JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray eras) {
-    WCHAR ad[BUFLEN];
-    const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
-    jstring tmp_string;
-    CHECK_NULL_RETURN(langtag, eras);
-
-    getCalendarInfoWrapper(langtag, getCalendarID(langtag), NULL,
-                      CAL_SERASTRING, ad, BUFLEN, NULL);
-
-    // Windows does not provide B.C. era.
-    tmp_string = (*env)->NewString(env, ad, (jsize)wcslen(ad));
-    if (tmp_string != NULL) {
-        (*env)->SetObjectArrayElement(env, eras, 1, tmp_string);
-    }
-
-    (*env)->ReleaseStringChars(env, jlangtag, langtag);
-
-    return eras;
+    return getErasImpl(env, jlangtag, -1, 0, eras);
 }
 
 /*
@@ -326,8 +332,8 @@
  */
 JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getMonths
   (JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray months) {
-    replaceCalendarArrayElems(env, jlangtag, months, monthsType,
-                      0, sizeof(monthsType)/sizeof(CALTYPE));
+    replaceCalendarArrayElems(env, jlangtag, -1, months, monthsType,
+                      0, MONTHTYPES, 0);
     return months;
 }
 
@@ -338,8 +344,8 @@
  */
 JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getShortMonths
   (JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray smonths) {
-    replaceCalendarArrayElems(env, jlangtag, smonths, sMonthsType,
-                      0, sizeof(sMonthsType)/sizeof(CALTYPE));
+    replaceCalendarArrayElems(env, jlangtag, -1, smonths, sMonthsType,
+                      0, MONTHTYPES, 0);
     return smonths;
 }
 
@@ -350,8 +356,8 @@
  */
 JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getWeekdays
   (JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray wdays) {
-    replaceCalendarArrayElems(env, jlangtag, wdays, wDaysType,
-                      1, sizeof(wDaysType)/sizeof(CALTYPE));
+    replaceCalendarArrayElems(env, jlangtag, -1, wdays, wDaysType,
+                      1, sizeof(wDaysType)/sizeof(CALTYPE), 0);
     return wdays;
 }
 
@@ -362,8 +368,8 @@
  */
 JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getShortWeekdays
   (JNIEnv *env, jclass cls, jstring jlangtag, jobjectArray swdays) {
-    replaceCalendarArrayElems(env, jlangtag, swdays, sWDaysType,
-                      1, sizeof(sWDaysType)/sizeof(CALTYPE));
+    replaceCalendarArrayElems(env, jlangtag, -1, swdays, sWDaysType,
+                      1, sizeof(sWDaysType)/sizeof(CALTYPE), 0);
     return swdays;
 }
 
@@ -676,6 +682,41 @@
 
 /*
  * Class:     sun_util_locale_provider_HostLocaleProviderAdapterImpl
+ * Method:    getCalendarDisplayStrings
+ * Signature: (Ljava/lang/String;III)[Ljava/lang/String;
+ */
+JNIEXPORT jobjectArray JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getCalendarDisplayStrings
+  (JNIEnv *env, jclass cls, jstring jlangtag, jint calid, jint field, jint style) {
+    jobjectArray ret = NULL;
+    CALTYPE * pCalType = NULL;
+
+    switch (field) {
+    case CALENDAR_FIELD_ERA:
+        return getErasImpl(env, jlangtag, calid, style, NULL);
+
+    case CALENDAR_FIELD_MONTH:
+        ret = (*env)->NewObjectArray(env, MONTHTYPES,
+                (*env)->FindClass(env, "java/lang/String"), NULL);
+        if (ret != NULL) {
+            if (style & CALENDAR_STYLE_SHORT_MASK) {
+                pCalType = sMonthsType;
+            } else {
+                pCalType = monthsType;
+            }
+
+            replaceCalendarArrayElems(env, jlangtag, calid, ret, pCalType,
+                          0, MONTHTYPES, style);
+        }
+        return ret;
+
+    default:
+        // not supported
+        return NULL;
+    }
+}
+
+/*
+ * Class:     sun_util_locale_provider_HostLocaleProviderAdapterImpl
  * Method:    getDisplayString
  * Signature: (Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
  */
@@ -714,10 +755,15 @@
     (*env)->ReleaseStringChars(env, jStr, pjChar);
 
     if (got) {
-        return (*env)->NewString(env, buf, (jsize)wcslen(buf));
-    } else {
-        return NULL;
+        // Hack: Windows 10 returns "Unknown Region (XX)" for localized XX region name.
+        // Take that as not known.
+        if (type != sun_util_locale_provider_HostLocaleProviderAdapterImpl_DN_LOCALE_REGION ||
+            wcsncmp(UNKNOWN_REGION, buf, UNKNOWN_REGION_SIZE) != 0) {
+            return (*env)->NewString(env, buf, (jsize)wcslen(buf));
+        }
     }
+
+    return NULL;
 }
 
 int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen) {
@@ -753,35 +799,62 @@
 }
 
 jint getCalendarID(const jchar *langtag) {
-    DWORD type;
+    DWORD type = -1;
     int got = getLocaleInfoWrapper(langtag,
         LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
         (LPWSTR)&type, sizeof(type));
 
     if (got) {
-        return type;
-    } else {
-        return 0;
+        switch (type) {
+            case CAL_GREGORIAN:
+            case CAL_GREGORIAN_US:
+            case CAL_JAPAN:
+            case CAL_TAIWAN:
+            case CAL_HIJRI:
+            case CAL_THAI:
+            case CAL_GREGORIAN_ME_FRENCH:
+            case CAL_GREGORIAN_ARABIC:
+            case CAL_GREGORIAN_XLIT_ENGLISH:
+            case CAL_GREGORIAN_XLIT_FRENCH:
+            case CAL_UMALQURA:
+                break;
+
+            default:
+                // non-supported calendars return -1
+                type = -1;
+                break;
+        }
     }
+
+    return type;
 }
 
-void replaceCalendarArrayElems(JNIEnv *env, jstring jlangtag, jobjectArray jarray, CALTYPE* pCalTypes, int offset, int length) {
+void replaceCalendarArrayElems(JNIEnv *env, jstring jlangtag, jint calid, jobjectArray jarray, CALTYPE* pCalTypes, int offset, int length, int style) {
     WCHAR name[BUFLEN];
     const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
-    int calid;
     jstring tmp_string;
+    CALTYPE isGenitive;
 
     CHECK_NULL(langtag);
-    calid = getCalendarID(langtag);
+
+    if (calid < 0) {
+        calid = getCalendarID(langtag);
+    }
 
     if (calid != -1) {
         int i;
+
+        if (!(style & CALENDAR_STYLE_STANDALONE_MASK)) {
+            isGenitive = CAL_RETURN_GENITIVE_NAMES;
+        }
+
         for (i = 0; i < length; i++) {
-            getCalendarInfoWrapper(langtag, calid, NULL,
-                              pCalTypes[i], name, BUFLEN, NULL);
-            tmp_string = (*env)->NewString(env, name, (jsize)wcslen(name));
-            if (tmp_string != NULL) {
-                (*env)->SetObjectArrayElement(env, jarray, i + offset, tmp_string);
+            if (getCalendarInfoWrapper(langtag, calid, NULL,
+                              pCalTypes[i] | isGenitive, name, BUFLEN, NULL) != 0) {
+                tmp_string = (*env)->NewString(env, name, (jsize)wcslen(name));
+                if (tmp_string != NULL) {
+                    (*env)->SetObjectArrayElement(env, jarray, i + offset, tmp_string);
+                }
             }
         }
     }
@@ -924,3 +997,99 @@
 
     wcscpy(ret, fixes[!prefix][!positive][style][pattern]);
 }
+
+int enumCalendarInfoWrapper(const jchar *langtag, CALID calid, CALTYPE type, LPWSTR buf, int buflen) {
+    if (pEnumCalendarInfoExEx) {
+        if (wcscmp(L"und", (LPWSTR)langtag) == 0) {
+            // defaults to "en"
+            return pEnumCalendarInfoExEx(&EnumCalendarInfoProc, L"en",
+                calid, NULL, type, (LPARAM)buf);
+        } else {
+            return pEnumCalendarInfoExEx(&EnumCalendarInfoProc, langtag,
+                calid, NULL, type, (LPARAM)buf);
+        }
+    } else {
+        return 0;
+    }
+}
+
+BOOL CALLBACK EnumCalendarInfoProc(LPWSTR lpCalInfoStr, CALID calid, LPWSTR lpReserved, LPARAM lParam) {
+    wcscat_s((LPWSTR)lParam, BUFLEN, lpCalInfoStr);
+    wcscat_s((LPWSTR)lParam, BUFLEN, L",");
+    return TRUE;
+}
+
+jobjectArray getErasImpl(JNIEnv *env, jstring jlangtag, jint calid, jint style, jobjectArray eras) {
+    const jchar * langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
+    WCHAR buf[BUFLEN];
+    jobjectArray ret = eras;
+    CALTYPE type;
+
+    CHECK_NULL_RETURN(langtag, ret);
+
+    buf[0] = '\0';
+    if (style & CALENDAR_STYLE_SHORT_MASK) {
+        type = CAL_SABBREVERASTRING;
+    } else {
+        type = CAL_SERASTRING;
+    }
+
+    if (calid < 0) {
+        calid = getCalendarID(langtag);
+    }
+
+    if (calid != -1 && enumCalendarInfoWrapper(langtag, calid, type, buf, BUFLEN)) {
+        // format in buf: "era0,era1,era2," where era0 is the current one
+        int eraCount;
+        LPWSTR current;
+        jsize array_length;
+
+        for(eraCount = 0, current = buf; *current != '\0'; current++) {
+            if (*current == L',') {
+                eraCount ++;
+            }
+        }
+
+        if (eras != NULL) {
+            array_length = (*env)->GetArrayLength(env, eras);
+        } else {
+            // +1 for the "before" era, e.g., BC, which Windows does not return.
+            array_length = (jsize)eraCount + 1;
+            ret = (*env)->NewObjectArray(env, array_length,
+                (*env)->FindClass(env, "java/lang/String"), NULL);
+        }
+
+        if (ret != NULL) {
+            int eraIndex;
+            LPWSTR era;
+
+            for(eraIndex = 0, era = current = buf; eraIndex < eraCount; era = current, eraIndex++) {
+                while (*current != L',') {
+                    current++;
+                }
+                *current++ = '\0';
+
+                if (eraCount - eraIndex < array_length &&
+                    *era != '\0') {
+                    (*env)->SetObjectArrayElement(env, ret,
+                        (jsize)(eraCount - eraIndex),
+                        (*env)->NewString(env, era, (jsize)wcslen(era)));
+                }
+            }
+
+            // Hack for the Japanese Imperial Calendar to insert Gregorian era for
+            // "Before Meiji"
+            if (calid == CAL_JAPAN) {
+                buf[0] = '\0';
+                if (enumCalendarInfoWrapper(langtag, CAL_GREGORIAN, type, buf, BUFLEN)) {
+                    jsize len = (jsize)wcslen(buf);
+                    buf[--len] = '\0'; // remove the last ','
+                    (*env)->SetObjectArrayElement(env, ret, 0, (*env)->NewString(env, buf, len));
+                }
+            }
+        }
+    }
+
+    (*env)->ReleaseStringChars(env, jlangtag, langtag);
+    return ret;
+}
diff --git a/jdk/src/java.base/windows/native/libjava/VM_md.c b/jdk/src/java.base/windows/native/libjava/VM_md.c
index 2b13ffc..73011d1 100644
--- a/jdk/src/java.base/windows/native/libjava/VM_md.c
+++ b/jdk/src/java.base/windows/native/libjava/VM_md.c
@@ -27,28 +27,28 @@
 
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getuid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getuid(JNIEnv *env, jclass thisclass) {
 
     /* -1 means function not available. */
     return -1;
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_geteuid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_geteuid(JNIEnv *env, jclass thisclass) {
 
     /* -1 means function not available. */
     return -1;
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getgid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getgid(JNIEnv *env, jclass thisclass) {
 
     /* -1 means function not available. */
     return -1;
 }
 
 JNIEXPORT jlong JNICALL
-Java_sun_misc_VM_getegid(JNIEnv *env, jclass thisclass) {
+Java_jdk_internal_misc_VM_getegid(JNIEnv *env, jclass thisclass) {
 
     /* -1 means function not available. */
     return -1;
diff --git a/jdk/src/java.base/windows/native/libjava/io_util_md.c b/jdk/src/java.base/windows/native/libjava/io_util_md.c
index a37ecb6..b762648 100644
--- a/jdk/src/java.base/windows/native/libjava/io_util_md.c
+++ b/jdk/src/java.base/windows/native/libjava/io_util_md.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 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
@@ -584,3 +584,14 @@
     }
     return long_to_jlong(pos.QuadPart);
 }
+
+jlong
+handleGetLength(FD fd) {
+    HANDLE h = (HANDLE) fd;
+    LARGE_INTEGER length;
+    if (GetFileSizeEx(h, &length) != 0) {
+        return long_to_jlong(length.QuadPart);
+    } else {
+        return -1;
+    }
+}
diff --git a/jdk/src/java.base/windows/native/libjava/io_util_md.h b/jdk/src/java.base/windows/native/libjava/io_util_md.h
index d85cdd3..59b2252 100644
--- a/jdk/src/java.base/windows/native/libjava/io_util_md.h
+++ b/jdk/src/java.base/windows/native/libjava/io_util_md.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 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
@@ -44,6 +44,7 @@
 int handleAvailable(FD fd, jlong *pbytes);
 int handleSync(FD fd);
 int handleSetLength(FD fd, jlong length);
+jlong handleGetLength(FD fd);
 JNIEXPORT jint handleRead(FD fd, void *buf, jint len);
 jint handleWrite(FD fd, const void *buf, jint len);
 jint handleAppend(FD fd, const void *buf, jint len);
@@ -84,6 +85,7 @@
 #define IO_Lseek handleLseek
 #define IO_Available handleAvailable
 #define IO_SetLength handleSetLength
+#define IO_GetLength handleGetLength
 
 /*
  * Setting the handle field in Java_java_io_FileDescriptor_set for
diff --git a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java
index 5379d63..d178ae4 100644
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/Parser.java
@@ -35,8 +35,6 @@
 import java.util.Enumeration;
 import java.net.URL;
 
-import sun.misc.MessageUtils;
-
 /**
  * A simple DTD-driven HTML parser. The parser reads an
  * HTML file from an InputStream and calls various methods
diff --git a/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java b/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java
index a9bacd5..2283e2f 100644
--- a/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java
+++ b/jdk/src/java.desktop/share/classes/sun/applet/AppletPanel.java
@@ -44,7 +44,6 @@
 import sun.awt.EmbeddedFrame;
 import sun.awt.SunToolkit;
 import sun.misc.ManagedLocalsThread;
-import sun.misc.MessageUtils;
 import sun.misc.PerformanceLogger;
 import sun.security.util.SecurityConstants;
 
@@ -118,8 +117,6 @@
      */
     Dimension currentAppletSize = new Dimension(10, 10);
 
-    MessageUtils mu = new MessageUtils();
-
     /**
      * The thread to use during applet loading
      */
diff --git a/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java b/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java
index 52a2b4e..61b0c81 100644
--- a/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java
+++ b/jdk/src/java.logging/share/classes/java/util/logging/FileHandler.java
@@ -639,7 +639,7 @@
                     continue;
                 } else if (ch2 == 'h') {
                     file = new File(System.getProperty("user.home"));
-                    if (sun.misc.VM.isSetUID()) {
+                    if (jdk.internal.misc.VM.isSetUID()) {
                         // Ok, we are in a set UID program.  For safety's sake
                         // we disallow attempts to open files relative to %h.
                         throw new IOException("can't use %h in set UID program");
diff --git a/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java b/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java
index 47b2449..24c8488 100644
--- a/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java
+++ b/jdk/src/java.management/share/classes/java/lang/management/ManagementFactory.java
@@ -583,7 +583,7 @@
         ClassLoader loader =
             AccessController.doPrivileged(
                 (PrivilegedAction<ClassLoader>) () -> cls.getClassLoader());
-        if (!sun.misc.VM.isSystemDomainLoader(loader)) {
+        if (!jdk.internal.misc.VM.isSystemDomainLoader(loader)) {
             throw new IllegalArgumentException(mxbeanName +
                 " is not a platform MXBean");
         }
diff --git a/jdk/src/java.management/share/classes/sun/management/ManagementFactoryHelper.java b/jdk/src/java.management/share/classes/sun/management/ManagementFactoryHelper.java
index 22b6940..44682b2 100644
--- a/jdk/src/java.management/share/classes/sun/management/ManagementFactoryHelper.java
+++ b/jdk/src/java.management/share/classes/sun/management/ManagementFactoryHelper.java
@@ -473,7 +473,7 @@
     public static Thread.State toThreadState(int state) {
         // suspended and native bits may be set in state
         int threadStatus = state & ~JMM_THREAD_STATE_FLAG_MASK;
-        return sun.misc.VM.toThreadState(threadStatus);
+        return jdk.internal.misc.VM.toThreadState(threadStatus);
     }
 
     // These values are defined in jmm.h
diff --git a/jdk/src/java.management/share/classes/sun/management/MemoryImpl.java b/jdk/src/java.management/share/classes/sun/management/MemoryImpl.java
index f64a0a5..00d68d4 100644
--- a/jdk/src/java.management/share/classes/sun/management/MemoryImpl.java
+++ b/jdk/src/java.management/share/classes/sun/management/MemoryImpl.java
@@ -59,7 +59,7 @@
     }
 
     public int getObjectPendingFinalizationCount() {
-        return sun.misc.VM.getFinalRefCount();
+        return jdk.internal.misc.VM.getFinalRefCount();
     }
 
     public void gc() {
diff --git a/jdk/src/java.rmi/share/classes/sun/rmi/server/MarshalInputStream.java b/jdk/src/java.rmi/share/classes/sun/rmi/server/MarshalInputStream.java
index 20f8874..3453e61 100644
--- a/jdk/src/java.rmi/share/classes/sun/rmi/server/MarshalInputStream.java
+++ b/jdk/src/java.rmi/share/classes/sun/rmi/server/MarshalInputStream.java
@@ -262,7 +262,7 @@
      * if only code from the null class loader is on the stack.
      */
     private static ClassLoader latestUserDefinedLoader() {
-        return sun.misc.VM.latestUserDefinedLoader();
+        return jdk.internal.misc.VM.latestUserDefinedLoader();
     }
 
     /**
diff --git a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
index 7d0e700..f22a188 100644
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java
@@ -397,7 +397,7 @@
          */
 
         if (osname != null && !osname.startsWith("Windows")) {
-            long uid = sun.misc.VM.getuid();
+            long uid = jdk.internal.misc.VM.getuid();
             if (uid != -1) {
                 name = File.separator + "tmp" +
                         File.separator + stdCacheNameComponent + "_" + uid;
diff --git a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/rcache/DflCache.java b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/rcache/DflCache.java
index cbae702..54fa34a 100644
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/rcache/DflCache.java
+++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/rcache/DflCache.java
@@ -60,7 +60,7 @@
  *
  *    service_euid
  *
- * in which euid is available as sun.misc.VM.geteuid().
+ * in which euid is available as jdk.internal.misc.VM.geteuid().
  *
  * The file has a header:
  *
@@ -107,7 +107,7 @@
     private static long uid;
     static {
         // Available on Solaris, Linux and Mac. Otherwise, -1 and no _euid suffix
-        uid = sun.misc.VM.geteuid();
+        uid = jdk.internal.misc.VM.geteuid();
     }
 
     public DflCache (String source) {
diff --git a/jdk/src/java.sql/share/classes/java/sql/Statement.java b/jdk/src/java.sql/share/classes/java/sql/Statement.java
index 3dd29c2a..fe40a2f 100644
--- a/jdk/src/java.sql/share/classes/java/sql/Statement.java
+++ b/jdk/src/java.sql/share/classes/java/sql/Statement.java
@@ -1582,4 +1582,43 @@
         return len >= 1 && len <= 128
                 && Pattern.compile("[\\p{Alpha}][\\p{Alnum}_]*").matcher(identifier).matches();
     }
+
+    /**
+    * Returns a {@code String} representing a National Character Set Literal
+    * enclosed in single quotes and prefixed with a upper case letter N.
+    * Any occurrence of a single quote within the string will be replaced
+    * by two single quotes.
+    *
+    * <blockquote>
+    * <table border = 1 cellspacing=0 cellpadding=5 >
+    * <caption>Examples of the conversion:</caption>
+    * <tr>
+    * <th>Value</th>
+    * <th>Result</th>
+    * </tr>
+    * <tr> <td align='center'>Hello</td> <td align='center'>N'Hello'</td> </tr>
+    * <tr> <td align='center'>G'Day</td> <td align='center'>N'G''Day'</td> </tr>
+    * <tr> <td align='center'>'G''Day'</td>
+    * <td align='center'>N'''G''''Day'''</td> </tr>
+    * <tr> <td align='center'>I'''M</td> <td align='center'>N'I''''''M'</td>
+    * <tr> <td align='center'>N'Hello'</td> <td align='center'>N'N''Hello'''</td> </tr>
+    *
+    * </table>
+    * </blockquote>
+    * @implNote
+    * JDBC driver implementations may need to provide their own implementation
+    * of this method in order to meet the requirements of the underlying
+    * datasource. An implementation of enquoteNCharLiteral may accept a different
+    * set of characters than that accepted by the same drivers implementation of
+    * enquoteLiteral.
+    * @param val a character string
+    * @return the result of replacing every single quote character in the
+    * argument by two single quote characters where this entire result is
+    * then prefixed with 'N'.
+    * @throws NullPointerException if val is {@code null}
+    * @throws SQLException if a database access error occurs
+    */
+    default String enquoteNCharLiteral(String val)  throws SQLException {
+        return "N'" + val.replace("'", "''") +  "'";
+   }
 }
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AWTEventMonitor.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AWTEventMonitor.java
index 257bbb7..cd3cf14 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AWTEventMonitor.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AWTEventMonitor.java
@@ -45,7 +45,6 @@
  * level support for capturing the top-level containers as they are created.
  */
 
-@jdk.Exported
 public class AWTEventMonitor {
 
     /**
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityEventMonitor.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityEventMonitor.java
index 4719e7c..603ba03 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityEventMonitor.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityEventMonitor.java
@@ -43,7 +43,6 @@
  *
  */
 
-@jdk.Exported
 public class AccessibilityEventMonitor {
 
     // listeners
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityListenerList.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityListenerList.java
index 76c7147..0de59f9 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityListenerList.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/AccessibilityListenerList.java
@@ -37,7 +37,6 @@
  *
  */
 
-@jdk.Exported
 public class AccessibilityListenerList {
     /* A null array to be shared by all empty listener lists */
     private final static Object[] NULL_ARRAY = new Object[0];
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventID.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventID.java
index bbd08f5..f984034 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventID.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventID.java
@@ -35,7 +35,6 @@
  * @see SwingEventMonitor
  *
  */
-@jdk.Exported
 public class EventID {
 
     /**
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java
index aa87860..4751ea0 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/EventQueueMonitor.java
@@ -40,7 +40,6 @@
  * @see AWTEventMonitor
  * @see SwingEventMonitor
  */
-@jdk.Exported
 public class EventQueueMonitor
         implements AWTEventListener {
 
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/GUIInitializedListener.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/GUIInitializedListener.java
index 9a4474d..02d706e 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/GUIInitializedListener.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/GUIInitializedListener.java
@@ -49,7 +49,6 @@
  * @see EventQueueMonitor#removeGUIInitializedListener
  *
  */
-@jdk.Exported
 public interface GUIInitializedListener extends EventListener {
 
     /**
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/SwingEventMonitor.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/SwingEventMonitor.java
index c2150cd..bbb0fcb 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/SwingEventMonitor.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/SwingEventMonitor.java
@@ -56,7 +56,6 @@
  * @see AWTEventMonitor
  *
  */
-@jdk.Exported
 public class SwingEventMonitor extends AWTEventMonitor {
 
     /**
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/TopLevelWindowListener.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/TopLevelWindowListener.java
index 94d0330..f24140c 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/TopLevelWindowListener.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/TopLevelWindowListener.java
@@ -43,7 +43,6 @@
  * @see EventQueueMonitor#removeTopLevelWindowListener
  *
  */
-@jdk.Exported
 public interface TopLevelWindowListener extends EventListener {
 
     /**
diff --git a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java
index 743777c..177fbb4 100644
--- a/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java
+++ b/jdk/src/jdk.accessibility/share/classes/com/sun/java/accessibility/util/Translator.java
@@ -58,7 +58,6 @@
  * to implement accessibility features for a toolkit.  Instead of relying upon this
  * code, a toolkit's components should implement interface {@code Accessible} directly.
  */
-@jdk.Exported
 public class Translator extends AccessibleContext
         implements Accessible, AccessibleComponent {
 
diff --git a/jdk/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java b/jdk/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java
index 47832a4..5ab82f3 100644
--- a/jdk/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java
+++ b/jdk/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java
@@ -53,7 +53,6 @@
  * Note: This class has to be public.  It's loaded from the VM like this:
  *       Class.forName(atName).newInstance();
  */
-@jdk.Exported(false)
 final public class AccessBridge {
 
     private static AccessBridge theAccessBridge;
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentInitializationException.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentInitializationException.java
index 058b0f0..3ec1453 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentInitializationException.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentInitializationException.java
@@ -40,7 +40,6 @@
  * the error returned by the agent's {@code Agent_OnAttach} function.
  * This error code can be obtained by invoking the {@link #returnValue() returnValue} method.
  */
-@jdk.Exported
 public class AgentInitializationException extends Exception {
 
     /** use serialVersionUID for interoperability */
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentLoadException.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentLoadException.java
index 8b04c46..1f22410 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentLoadException.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AgentLoadException.java
@@ -36,7 +36,6 @@
  * com.sun.tools.attach.VirtualMachine#loadAgentPath loadAgentPath} methods
  * if the agent, or agent library, cannot be loaded.
  */
-@jdk.Exported
 public class AgentLoadException extends Exception {
 
     /** use serialVersionUID for interoperability */
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachNotSupportedException.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachNotSupportedException.java
index fb55186..f9f7476 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachNotSupportedException.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachNotSupportedException.java
@@ -36,7 +36,6 @@
  * AttachProvider.attachVirtualMachine} if the provider attempts to
  * attach to a Java virtual machine with which it not comptatible.
  */
-@jdk.Exported
 public class AttachNotSupportedException extends Exception {
 
     /** use serialVersionUID for interoperability */
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachOperationFailedException.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachOperationFailedException.java
index fd37bb3..c245ec7 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachOperationFailedException.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachOperationFailedException.java
@@ -37,7 +37,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public class AttachOperationFailedException extends IOException {
 
     private static final long serialVersionUID = 2140308168167478043L;
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java
index 0f573e8..e5dc6af 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/AttachPermission.java
@@ -79,7 +79,6 @@
  * @see com.sun.tools.attach.spi.AttachProvider
  */
 
-@jdk.Exported
 public final class AttachPermission extends java.security.BasicPermission {
 
     /** use serialVersionUID for interoperability */
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java
index a9a9a56..345df5e 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachine.java
@@ -96,7 +96,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class VirtualMachine {
     private AttachProvider provider;
     private String id;
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachineDescriptor.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachineDescriptor.java
index b8d4ad6..4f6e77c 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachineDescriptor.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/VirtualMachineDescriptor.java
@@ -55,7 +55,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public class VirtualMachineDescriptor {
 
     private AttachProvider provider;
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/package-info.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/package-info.java
index 465e3fd..3849638 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/package-info.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/package-info.java
@@ -38,5 +38,4 @@
  * @since 1.6
  */
 
-@jdk.Exported
 package com.sun.tools.attach;
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java
index 2d9aa9c..0ca0539 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/AttachProvider.java
@@ -74,7 +74,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class AttachProvider {
 
     private static final Object lock = new Object();
diff --git a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/package-info.java b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/package-info.java
index b2c68eb..9817b19 100644
--- a/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/package-info.java
+++ b/jdk/src/jdk.attach/share/classes/com/sun/tools/attach/spi/package-info.java
@@ -31,5 +31,4 @@
  * @since 1.6
  */
 
-@jdk.Exported
 package com.sun.tools.attach.spi;
diff --git a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ExtendedCharsets.java.template b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ExtendedCharsets.java.template
index f654c77..4bca8ab 100644
--- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ExtendedCharsets.java.template
+++ b/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/ExtendedCharsets.java.template
@@ -97,7 +97,7 @@
     protected void init() {
         if (initialized)
             return;
-        if (!sun.misc.VM.isBooted())
+        if (!jdk.internal.misc.VM.isBooted())
             return;
 
         String map = getProperty("sun.nio.cs.map");
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Authenticator.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Authenticator.java
index cdce078..5b7445d 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Authenticator.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Authenticator.java
@@ -36,7 +36,6 @@
  * Note. This implies that any caching of credentials or other authentication
  * information must be done outside of this class.
  */
-@jdk.Exported
 public abstract class Authenticator {
 
     /**
@@ -48,7 +47,6 @@
      * Indicates an authentication failure. The authentication
      * attempt has completed.
      */
-    @jdk.Exported
     public static class Failure extends Result {
 
         private int responseCode;
@@ -70,7 +68,6 @@
      * authenticated user principal can be acquired by calling
      * getPrincipal().
      */
-    @jdk.Exported
     public static class Success extends Result {
         private HttpPrincipal principal;
 
@@ -92,7 +89,6 @@
      * set any necessary response headers in the given HttpExchange
      * before returning this Retry object.
      */
-    @jdk.Exported
     public static class Retry extends Result {
 
         private int responseCode;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/BasicAuthenticator.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/BasicAuthenticator.java
index eb87031..c9701c0 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/BasicAuthenticator.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/BasicAuthenticator.java
@@ -33,7 +33,6 @@
  * to provide an implementation of {@link #checkCredentials(String,String)}
  * which is called to verify each incoming request.
  */
-@jdk.Exported
 public abstract class BasicAuthenticator extends Authenticator {
 
     protected String realm;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Filter.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Filter.java
index ac5d6fe..70ca21e 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Filter.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Filter.java
@@ -39,7 +39,6 @@
  * exchange handler.
  * @since 1.6
  */
-@jdk.Exported
 public abstract class Filter {
 
     protected Filter () {}
@@ -49,7 +48,6 @@
      * Each filter in the chain is given one of these
      * so it can invoke the next filter in the chain
      */
-    @jdk.Exported
     public static class Chain {
         /* the last element in the chain must invoke the users
          * handler
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Headers.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Headers.java
index 5c0608b..2569060 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Headers.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/Headers.java
@@ -61,7 +61,6 @@
  * as a header line containing the key but no associated value.
  * @since 1.6
  */
-@jdk.Exported
 public class Headers implements Map<String,List<String>> {
 
         HashMap<String,List<String>> map;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpContext.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpContext.java
index 169e4a0..12ffdcc 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpContext.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpContext.java
@@ -40,7 +40,6 @@
  * context can be pre- and post-processed by each Filter in the chain.
  * @since 1.6
  */
-@jdk.Exported
 public abstract class HttpContext {
 
     protected HttpContext () {
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java
index 0cf3623..0ce0b12 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpExchange.java
@@ -64,7 +64,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class HttpExchange {
 
     protected HttpExchange () {
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpHandler.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpHandler.java
index 62b621c..8ea7024 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpHandler.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpHandler.java
@@ -32,7 +32,6 @@
  * HTTP exchange is handled by one of these handlers.
  * @since 1.6
  */
-@jdk.Exported
 public interface HttpHandler {
     /**
      * Handle the given request and generate an appropriate response.
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpPrincipal.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpPrincipal.java
index df5e422..b0b6bdc 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpPrincipal.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpPrincipal.java
@@ -33,7 +33,6 @@
  * Represents a user authenticated by HTTP Basic or Digest
  * authentication.
  */
-@jdk.Exported
 public class HttpPrincipal implements Principal {
     private String username, realm;
 
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java
index f26dc1d..30ad5ce 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpServer.java
@@ -87,7 +87,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class HttpServer {
 
     /**
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsConfigurator.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsConfigurator.java
index 22bca16..6c4ddae 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsConfigurator.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsConfigurator.java
@@ -67,7 +67,6 @@
  * </pre></blockquote>
  * @since 1.6
  */
-@jdk.Exported
 public class HttpsConfigurator {
 
     private SSLContext context;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsExchange.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsExchange.java
index 99a2733..9bf9ed7 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsExchange.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsExchange.java
@@ -39,7 +39,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class HttpsExchange extends HttpExchange {
 
     protected HttpsExchange () {
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsParameters.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsParameters.java
index f3fd7a6..0aabee0 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsParameters.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsParameters.java
@@ -49,7 +49,6 @@
  * are used, and any settings made in this object are ignored.
  * @since 1.6
  */
-@jdk.Exported
 public abstract class HttpsParameters {
 
     private String[] cipherSuites;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsServer.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsServer.java
index f7eb542..ddf0547 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsServer.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/HttpsServer.java
@@ -45,7 +45,6 @@
  * @since 1.6
  */
 
-@jdk.Exported
 public abstract class HttpsServer extends HttpServer {
 
     /**
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/package-info.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/package-info.java
index 84f13d6..9737f97 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/package-info.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/package-info.java
@@ -123,5 +123,4 @@
 
    @since 1.6
  */
-@jdk.Exported
 package com.sun.net.httpserver;
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/HttpServerProvider.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/HttpServerProvider.java
index c838bd5..df3efc9 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/HttpServerProvider.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/HttpServerProvider.java
@@ -40,7 +40,6 @@
  * {@link HttpServer} and associated classes. Applications do not normally use
  * this class. See {@link #provider()} for how providers are found and loaded.
  */
-@jdk.Exported
 public abstract class HttpServerProvider {
 
     /**
diff --git a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/package-info.java b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/package-info.java
index 8c4d318..da8fecb 100644
--- a/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/package-info.java
+++ b/jdk/src/jdk.httpserver/share/classes/com/sun/net/httpserver/spi/package-info.java
@@ -27,5 +27,4 @@
  * Provides a pluggable service provider interface, which allows the HTTP server
  * implementation to be replaced with other implementations.
  */
-@jdk.Exported
 package com.sun.net.httpserver.spi;
diff --git a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java
index 4de54e9..0976535 100644
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSigner.java
@@ -38,7 +38,6 @@
  * @deprecated This class has been deprecated.
  */
 
-@jdk.Exported
 @Deprecated
 public abstract class ContentSigner {
 
diff --git a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java
index 3a45318..e761a2c 100644
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/ContentSignerParameters.java
@@ -36,7 +36,6 @@
  * @author Vincent Ryan
  * @deprecated This class has been deprecated.
  */
-@jdk.Exported
 @Deprecated
 public interface ContentSignerParameters {
 
diff --git a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java
index cfed536..08197b5 100644
--- a/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java
+++ b/jdk/src/jdk.jartool/share/classes/com/sun/jarsigner/package-info.java
@@ -35,5 +35,4 @@
  * to sign JAR files.
  */
 
-@jdk.Exported
 package com.sun.jarsigner;
diff --git a/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java b/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java
index b9ce4e3..a25ff87 100644
--- a/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java
+++ b/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java
@@ -79,7 +79,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public final class JarSigner {
 
     /**
@@ -88,7 +87,6 @@
      *
      * @since 1.9
      */
-    @jdk.Exported
     public static class Builder {
 
         // Signer materials:
diff --git a/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSignerException.java b/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSignerException.java
index a6c73a6..d1b5449 100644
--- a/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSignerException.java
+++ b/jdk/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSignerException.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public class JarSignerException extends RuntimeException {
 
     private static final long serialVersionUID = -4732217075689309530L;
diff --git a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java
index fd941b8..e324109 100644
--- a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java
+++ b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsoleContext.java
@@ -42,7 +42,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public interface JConsoleContext {
     /**
      * The {@link ConnectionState ConnectionState} bound property name.
@@ -53,7 +52,6 @@
      * Values for the {@linkplain #CONNECTION_STATE_PROPERTY
      * <i>ConnectionState</i>} bound property.
      */
-    @jdk.Exported
     public enum ConnectionState {
         /**
          * The connection has been successfully established.
diff --git a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsolePlugin.java b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsolePlugin.java
index 48f43dc..04da16e 100644
--- a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsolePlugin.java
+++ b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/JConsolePlugin.java
@@ -72,7 +72,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public abstract class JConsolePlugin {
     private volatile JConsoleContext context = null;
     private List<PropertyChangeListener> listeners = null;
diff --git a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/package-info.java b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/package-info.java
index 99b52aa3..d9369d0 100644
--- a/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/package-info.java
+++ b/jdk/src/jdk.jconsole/share/classes/com/sun/tools/jconsole/package-info.java
@@ -29,5 +29,4 @@
  * @since 1.6
  */
 
-@jdk.Exported
 package com.sun.tools.jconsole;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/AbsentInformationException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/AbsentInformationException.java
index 36ac31e..6a2188e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/AbsentInformationException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/AbsentInformationException.java
@@ -31,7 +31,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class AbsentInformationException extends Exception
 {
     private static final long serialVersionUID = 4988939309582416373L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Accessible.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Accessible.java
index ba2463a..8d3ef26 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Accessible.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Accessible.java
@@ -36,7 +36,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Accessible {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayReference.java
index d4cf64b..11b5bdb 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayReference.java
@@ -39,7 +39,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ArrayReference extends ObjectReference {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayType.java
index 45c4f4d..d693c0e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ArrayType.java
@@ -38,7 +38,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ArrayType extends ReferenceType {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanType.java
index 7bf98c8..6e54580 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface BooleanType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanValue.java
index 73297fa..aca19cf 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/BooleanValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface BooleanValue extends PrimitiveValue {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Bootstrap.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Bootstrap.java
index 623a7a4..2e63914 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Bootstrap.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Bootstrap.java
@@ -34,7 +34,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public class Bootstrap extends Object {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteType.java
index dc83cc3..6296aa5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ByteType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteValue.java
index a16ecd0..89074aa 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ByteValue.java
@@ -33,7 +33,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ByteValue extends PrimitiveValue, Comparable<ByteValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharType.java
index fab5a16..0710db0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface CharType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharValue.java
index 2f9d630..e85348b 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/CharValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface CharValue extends PrimitiveValue, Comparable<CharValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassLoaderReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassLoaderReference.java
index b8363ae..9340bab 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassLoaderReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassLoaderReference.java
@@ -39,7 +39,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassLoaderReference extends ObjectReference {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotLoadedException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotLoadedException.java
index ab516e0..790f8d0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotLoadedException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotLoadedException.java
@@ -67,7 +67,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class ClassNotLoadedException extends Exception
 {
     private static final long serialVersionUID = -6242978768444298722L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotPreparedException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotPreparedException.java
index 528b36e..f30e87f 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotPreparedException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassNotPreparedException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class ClassNotPreparedException extends RuntimeException {
     private static final long serialVersionUID = -6120698967144079642L;
     public ClassNotPreparedException()
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassObjectReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassObjectReference.java
index 79a306a..1670cea 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassObjectReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassObjectReference.java
@@ -35,7 +35,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassObjectReference extends ObjectReference {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassType.java
index 296f2e7..3286c73 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ClassType.java
@@ -41,7 +41,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassType extends ReferenceType {
     /**
      * Gets the superclass of this class.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleType.java
index d40da78..41172bf 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface DoubleType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleValue.java
index e2f9cc2..82e9eec 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/DoubleValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface DoubleValue extends PrimitiveValue, Comparable<DoubleValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Field.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Field.java
index 6842a81..206e981 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Field.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Field.java
@@ -38,7 +38,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Field extends TypeComponent, Comparable<Field> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatType.java
index 29cb99a..a585ead 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface FloatType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatValue.java
index aa3be62..bb966bc 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/FloatValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface FloatValue extends PrimitiveValue, Comparable<FloatValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IncompatibleThreadStateException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IncompatibleThreadStateException.java
index 11e110f..1fd8e71 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IncompatibleThreadStateException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IncompatibleThreadStateException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class IncompatibleThreadStateException extends Exception {
     private static final long serialVersionUID = 6199174323414551389L;
 
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InconsistentDebugInfoException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InconsistentDebugInfoException.java
index 8fe3ae9..305efa0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InconsistentDebugInfoException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InconsistentDebugInfoException.java
@@ -34,7 +34,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class InconsistentDebugInfoException extends RuntimeException {
     private static final long serialVersionUID = 7964236415376861808L;
     public InconsistentDebugInfoException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerType.java
index f19b6de..cf4edd0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface IntegerType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerValue.java
index b8a10a8..d0bd44a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/IntegerValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface IntegerValue extends PrimitiveValue, Comparable<IntegerValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InterfaceType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InterfaceType.java
index 80250de..64a9fa4 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InterfaceType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InterfaceType.java
@@ -43,7 +43,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface InterfaceType extends ReferenceType {
     /**
      * Gets the interfaces directly extended by this interface.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InternalException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InternalException.java
index b688ca5..a291ac1 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InternalException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InternalException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class InternalException extends RuntimeException {
      private static final long serialVersionUID = -9171606393104480607L;
      private int errorCode;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidCodeIndexException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidCodeIndexException.java
index 928f741..3e62cf8 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidCodeIndexException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidCodeIndexException.java
@@ -34,7 +34,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 @Deprecated
 public class InvalidCodeIndexException extends RuntimeException {
     private static final long serialVersionUID = 7416010225133747805L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidLineNumberException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidLineNumberException.java
index 0786d52..bc40ea6 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidLineNumberException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidLineNumberException.java
@@ -34,7 +34,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 @Deprecated
 public class InvalidLineNumberException extends RuntimeException {
     private static final long serialVersionUID = 4048709912372692875L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidStackFrameException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidStackFrameException.java
index 2f28d07..e57bfa5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidStackFrameException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidStackFrameException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class InvalidStackFrameException extends RuntimeException {
     private static final long serialVersionUID = -1919378296505827922L;
     public InvalidStackFrameException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidTypeException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidTypeException.java
index 299c447..904248c 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidTypeException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvalidTypeException.java
@@ -32,7 +32,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public class InvalidTypeException extends Exception {
     private static final long serialVersionUID = 2256667231949650806L;
 
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvocationException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvocationException.java
index 1f8179e..4e66f60 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvocationException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/InvocationException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class InvocationException extends Exception {
     private static final long serialVersionUID = 6066780907971918568L;
     ObjectReference exception;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/JDIPermission.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/JDIPermission.java
index 0f4abb2..109500a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/JDIPermission.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/JDIPermission.java
@@ -78,7 +78,6 @@
  *
  */
 
-@jdk.Exported
 public final class JDIPermission extends java.security.BasicPermission {
     private static final long serialVersionUID = -6988461416938786271L;
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LocalVariable.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LocalVariable.java
index 4b15d91..0930801 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LocalVariable.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LocalVariable.java
@@ -42,7 +42,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface LocalVariable extends Mirror, Comparable<LocalVariable> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Locatable.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Locatable.java
index a008943..16db7bf 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Locatable.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Locatable.java
@@ -33,7 +33,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Locatable {
     /**
      * Returns the {@link Location} of this mirror, if there is
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Location.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Location.java
index e508781..b17f241 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Location.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Location.java
@@ -86,7 +86,6 @@
  * @author James McIlree
  * @since 1.3
  */
-@jdk.Exported
 public interface Location extends Mirror, Comparable<Location> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongType.java
index f3cc736..3ce46a5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface LongType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongValue.java
index 98e25c2..e3f33a7 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/LongValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface LongValue extends PrimitiveValue, Comparable<LongValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Method.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Method.java
index 39cde3e..02d6ae9 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Method.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Method.java
@@ -39,7 +39,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Method extends TypeComponent, Locatable, Comparable<Method> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Mirror.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Mirror.java
index eb01abf..e9f8887 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Mirror.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Mirror.java
@@ -56,7 +56,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/MonitorInfo.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/MonitorInfo.java
index ef72517..29aae2c 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/MonitorInfo.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/MonitorInfo.java
@@ -32,7 +32,6 @@
  * @since  1.6
  */
 
-@jdk.Exported
 public interface MonitorInfo extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/NativeMethodException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/NativeMethodException.java
index 6379701..2708c20 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/NativeMethodException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/NativeMethodException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class NativeMethodException extends RuntimeException {
 
     private static final long serialVersionUID = 3924951669039469992L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectCollectedException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectCollectedException.java
index b88395e..b088064 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectCollectedException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectCollectedException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class ObjectCollectedException extends RuntimeException {
     private static final long serialVersionUID = -1928428056197269588L;
     public ObjectCollectedException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectReference.java
index b6bf5a3..629fdb8 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ObjectReference.java
@@ -55,7 +55,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ObjectReference extends Value {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PathSearchingVirtualMachine.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PathSearchingVirtualMachine.java
index 7a75fd6..adc6b76 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PathSearchingVirtualMachine.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PathSearchingVirtualMachine.java
@@ -33,7 +33,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface PathSearchingVirtualMachine extends VirtualMachine {
     /**
      * Get the class path for this virtual machine.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveType.java
index 9cc721f..b4315b2 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveType.java
@@ -37,6 +37,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface PrimitiveType extends Type {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveValue.java
index 9601488..e33be47 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/PrimitiveValue.java
@@ -35,7 +35,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface PrimitiveValue extends Value {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ReferenceType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ReferenceType.java
index 43d1c02..30052d5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ReferenceType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ReferenceType.java
@@ -77,7 +77,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ReferenceType
     extends Type, Comparable<ReferenceType>, Accessible
 {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortType.java
index 9e0a2a9..cfff540 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortType.java
@@ -35,6 +35,5 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ShortType extends PrimitiveType {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortValue.java
index 61e54ec..6cedd8d 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ShortValue.java
@@ -34,7 +34,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ShortValue extends PrimitiveValue, Comparable<ShortValue> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StackFrame.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StackFrame.java
index 9d51d8a..7b330c7 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StackFrame.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StackFrame.java
@@ -58,7 +58,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface StackFrame extends Mirror, Locatable {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StringReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StringReference.java
index 92e7167..8a1053a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StringReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/StringReference.java
@@ -35,7 +35,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface StringReference extends ObjectReference {
     /**
      * Returns the StringReference as a String. The returned string
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadGroupReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadGroupReference.java
index 110504f..9c33180 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadGroupReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadGroupReference.java
@@ -37,7 +37,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadGroupReference extends ObjectReference {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java
index 2e09ec8..ab537ee 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java
@@ -36,7 +36,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadReference extends ObjectReference {
     /** Thread status is unknown */
     public final int THREAD_STATUS_UNKNOWN  =-1;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Type.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Type.java
index 852d714..41b61fc 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Type.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Type.java
@@ -127,7 +127,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface Type extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/TypeComponent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/TypeComponent.java
index fa36d7b..5e077ea 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/TypeComponent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/TypeComponent.java
@@ -44,7 +44,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface TypeComponent extends Mirror, Accessible {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMCannotBeModifiedException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMCannotBeModifiedException.java
index 49f1c88..0366425 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMCannotBeModifiedException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMCannotBeModifiedException.java
@@ -32,7 +32,6 @@
  * @author Jim Holmlund
  * @since  1.5
  */
-@jdk.Exported
 public class VMCannotBeModifiedException extends UnsupportedOperationException {
     private static final long serialVersionUID = -4063879815130164009L;
     public VMCannotBeModifiedException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMDisconnectedException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMDisconnectedException.java
index faeab60..f6805f0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMDisconnectedException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMDisconnectedException.java
@@ -33,7 +33,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public class VMDisconnectedException extends RuntimeException {
 
     private static final long serialVersionUID = 2892975269768351637L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMMismatchException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMMismatchException.java
index b05a9aa..ff0c3db 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMMismatchException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMMismatchException.java
@@ -33,7 +33,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class VMMismatchException extends RuntimeException {
     private static final long serialVersionUID = 289169358790459564L;
     public VMMismatchException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMOutOfMemoryException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMOutOfMemoryException.java
index cc64d92..2834d34 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMOutOfMemoryException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VMOutOfMemoryException.java
@@ -32,7 +32,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class VMOutOfMemoryException extends RuntimeException {
     private static final long serialVersionUID = 71504228548910686L;
     public VMOutOfMemoryException() {
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Value.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Value.java
index 01d869b..75e5e41 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Value.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/Value.java
@@ -168,7 +168,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface Value extends Mirror {
     /**
      * Returns the run-time type of this value.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachine.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachine.java
index 0571a27..c54cc16 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachine.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachine.java
@@ -70,7 +70,6 @@
  * @author James McIlree
  * @since  1.3
  */
-@jdk.Exported
 public interface VirtualMachine extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java
index dbde25b..5a6fd8b 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VirtualMachineManager.java
@@ -275,7 +275,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface VirtualMachineManager {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidType.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidType.java
index 9a9ee46..460c452 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidType.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidType.java
@@ -35,6 +35,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface VoidType extends Type {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidValue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidValue.java
index f3fb87e..6a60cb8 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidValue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/VoidValue.java
@@ -32,7 +32,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface VoidValue extends Value {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java
index a4409c6..ccb11c2 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/AttachingConnector.java
@@ -35,7 +35,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface AttachingConnector extends Connector {
     /**
      * Attaches to a running application and returns a
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Connector.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Connector.java
index 52aebbf..a2b4b38 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Connector.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Connector.java
@@ -45,7 +45,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface Connector {
     /**
      * Returns a short identifier for the connector. Connector implementors
@@ -92,7 +91,6 @@
      * {@link Connector.IntegerArgument},
      * or {@link Connector.SelectedArgument}.
      */
-    @jdk.Exported
     public interface Argument extends Serializable {
         /**
          * Returns a short, unique identifier for the argument.
@@ -158,7 +156,6 @@
      * whose value is Boolean.  Boolean values are represented
      * by the localized versions of the strings "true" and "false".
      */
-    @jdk.Exported
     public interface BooleanArgument extends Argument {
         /**
          * Sets the value of the argument.
@@ -199,7 +196,6 @@
      * whose value is an integer.  Integer values are represented
      * by their corresponding strings.
      */
-    @jdk.Exported
     public interface IntegerArgument extends Argument {
         /**
          * Sets the value of the argument.
@@ -261,7 +257,6 @@
      * Specification for and value of a Connector argument,
      * whose value is a String.
      */
-    @jdk.Exported
     public interface StringArgument extends Argument {
         /**
          * Performs basic sanity check of argument.
@@ -274,7 +269,6 @@
      * Specification for and value of a Connector argument,
      * whose value is a String selected from a list of choices.
      */
-    @jdk.Exported
     public interface SelectedArgument extends Argument {
         /**
          * Return the possible values for the argument
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
index b7f57c0..d122fa2 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/IllegalConnectorArgumentsException.java
@@ -36,7 +36,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class IllegalConnectorArgumentsException extends Exception {
 
     private static final long serialVersionUID = -3042212603611350941L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/LaunchingConnector.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/LaunchingConnector.java
index af801e9..2ad3ba6 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/LaunchingConnector.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/LaunchingConnector.java
@@ -35,7 +35,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface LaunchingConnector extends Connector {
     /**
      * Launches an application and connects to its VM. Properties
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/ListeningConnector.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/ListeningConnector.java
index 1048201..0057299 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/ListeningConnector.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/ListeningConnector.java
@@ -35,7 +35,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface ListeningConnector extends Connector {
     /**
      * Indicates whether this listening connector supports multiple
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Transport.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Transport.java
index 102d64c..d185132 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Transport.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/Transport.java
@@ -42,7 +42,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public interface Transport {
     /**
      * Returns a short identifier for the transport.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/TransportTimeoutException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/TransportTimeoutException.java
index 2a13567..d2a8e50 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/TransportTimeoutException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/TransportTimeoutException.java
@@ -54,7 +54,6 @@
  *
  * @since 1.5
  */
-@jdk.Exported
 public class TransportTimeoutException extends java.io.IOException {
     private static final long serialVersionUID = 4107035242623365074L;
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/VMStartException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/VMStartException.java
index 04c0629..0296e78 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/VMStartException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/VMStartException.java
@@ -34,7 +34,6 @@
  * @author Gordon Hirsch
  * @since  1.3
  */
-@jdk.Exported
 public class VMStartException extends Exception {
 
     private static final long serialVersionUID = 6408644824640801020L;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/package-info.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/package-info.java
index c444b75..c7a240e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/package-info.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/package-info.java
@@ -35,5 +35,4 @@
  * extension.
  */
 
-@jdk.Exported
 package com.sun.jdi.connect;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java
index 009128b..88fc547 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/ClosedConnectionException.java
@@ -45,7 +45,6 @@
  *
  * @since 1.5
  */
-@jdk.Exported
 public class ClosedConnectionException extends java.io.IOException {
     private static final long serialVersionUID = 3877032124297204774L;
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/Connection.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/Connection.java
index 31e1ca5..2067d71 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/Connection.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/Connection.java
@@ -56,7 +56,6 @@
  * @since 1.5
  */
 
-@jdk.Exported
 public abstract class Connection {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/TransportService.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/TransportService.java
index f51c762..61eba88 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/TransportService.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/TransportService.java
@@ -77,7 +77,6 @@
  * @since 1.5
  */
 
-@jdk.Exported
 public abstract class TransportService {
 
     /**
@@ -97,7 +96,6 @@
     /**
      * The transport service capabilities.
      */
-    @jdk.Exported
     public static abstract class Capabilities {
 
         /**
@@ -231,7 +229,6 @@
      * #stopListening stopListening} to stop the transport
      * service from listening on an address.
      */
-    @jdk.Exported
     public static abstract class ListenKey {
 
         /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/package-info.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/package-info.java
index 956e28d..ad8a359 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/package-info.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/connect/spi/package-info.java
@@ -29,5 +29,4 @@
  * implementations.
  */
 
-@jdk.Exported
 package com.sun.jdi.connect.spi;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/AccessWatchpointEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/AccessWatchpointEvent.java
index b04d4f7..b56f0ca 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/AccessWatchpointEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/AccessWatchpointEvent.java
@@ -37,6 +37,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface AccessWatchpointEvent extends WatchpointEvent {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/BreakpointEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/BreakpointEvent.java
index 565f4f0..131a031 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/BreakpointEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/BreakpointEvent.java
@@ -47,6 +47,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface BreakpointEvent extends LocatableEvent {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassPrepareEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassPrepareEvent.java
index 2f0bf5a..4812994a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassPrepareEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassPrepareEvent.java
@@ -39,7 +39,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassPrepareEvent extends Event {
     /**
      * Returns the thread in which this event has occurred.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassUnloadEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassUnloadEvent.java
index b900e6a..3576195 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassUnloadEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ClassUnloadEvent.java
@@ -39,7 +39,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassUnloadEvent extends Event {
     /**
      * Returns the name of the class that has been unloaded.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/Event.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/Event.java
index 8e8185c..b6f9653 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/Event.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/Event.java
@@ -43,7 +43,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface Event extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventIterator.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventIterator.java
index e16ccc5..0028d85 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventIterator.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventIterator.java
@@ -40,7 +40,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface EventIterator extends Iterator<Event> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventQueue.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventQueue.java
index e7912ba..f4c313a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventQueue.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventQueue.java
@@ -57,7 +57,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface EventQueue extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventSet.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventSet.java
index 640dacd..1acef1e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventSet.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/EventSet.java
@@ -126,7 +126,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface EventSet extends Mirror, Set<Event> {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ExceptionEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ExceptionEvent.java
index 91ed8e4..ba887e5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ExceptionEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ExceptionEvent.java
@@ -44,7 +44,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ExceptionEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/LocatableEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/LocatableEvent.java
index ab4d7f5..489e611 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/LocatableEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/LocatableEvent.java
@@ -36,7 +36,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface LocatableEvent extends Event, Locatable {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodEntryEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodEntryEvent.java
index 29e4df6..29216ed 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodEntryEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodEntryEvent.java
@@ -43,7 +43,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface MethodEntryEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodExitEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodExitEvent.java
index 6c7ad30..67ef528 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodExitEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MethodExitEvent.java
@@ -40,7 +40,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface MethodExitEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ModificationWatchpointEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ModificationWatchpointEvent.java
index 965a6cd..b35a9f7 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ModificationWatchpointEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ModificationWatchpointEvent.java
@@ -38,7 +38,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ModificationWatchpointEvent extends WatchpointEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnterEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnterEvent.java
index 8e7cbaa..e3b3a8f 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnterEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnterEvent.java
@@ -39,7 +39,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorContendedEnterEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnteredEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnteredEvent.java
index 8b4ca48..774e1b7 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnteredEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorContendedEnteredEvent.java
@@ -38,7 +38,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorContendedEnteredEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitEvent.java
index 9a06435..2e5c63f 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitEvent.java
@@ -37,7 +37,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorWaitEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitedEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitedEvent.java
index f29bed1..93917b5 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitedEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/MonitorWaitedEvent.java
@@ -37,7 +37,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorWaitedEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/StepEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/StepEvent.java
index 2790787..269ed38 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/StepEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/StepEvent.java
@@ -46,6 +46,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface StepEvent extends LocatableEvent {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadDeathEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadDeathEvent.java
index cd23380..1277172 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadDeathEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadDeathEvent.java
@@ -45,7 +45,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadDeathEvent extends Event {
     /**
      * Returns the thread which is terminating.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadStartEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadStartEvent.java
index 01e9e63..e5fa0d2 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadStartEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/ThreadStartEvent.java
@@ -52,7 +52,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadStartEvent extends Event {
     /**
      * Returns the thread which has started.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDeathEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDeathEvent.java
index c96aa12..21e0107 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDeathEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDeathEvent.java
@@ -68,6 +68,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface VMDeathEvent extends Event {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDisconnectEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDisconnectEvent.java
index 82c49e2..a2cf66e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDisconnectEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMDisconnectEvent.java
@@ -52,6 +52,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface VMDisconnectEvent extends Event {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMStartEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMStartEvent.java
index 586526a..37693ad 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMStartEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/VMStartEvent.java
@@ -43,7 +43,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface VMStartEvent extends Event {
     /**
      * Returns the initial thread of the VM which has started.
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/WatchpointEvent.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/WatchpointEvent.java
index 0246bff..4573407 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/WatchpointEvent.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/WatchpointEvent.java
@@ -37,7 +37,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface WatchpointEvent extends LocatableEvent {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/package-info.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/package-info.java
index fa9afe3..921df07 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/package-info.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/event/package-info.java
@@ -43,5 +43,4 @@
  * extension.
  */
 
-@jdk.Exported
 package com.sun.jdi.event;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/package-info.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/package-info.java
index 00f422f..3b34bc2 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/package-info.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/package-info.java
@@ -44,5 +44,4 @@
  * extension.
  */
 
-@jdk.Exported
 package com.sun.jdi;
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/AccessWatchpointRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/AccessWatchpointRequest.java
index 9b6e71b..091cf44 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/AccessWatchpointRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/AccessWatchpointRequest.java
@@ -55,6 +55,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface AccessWatchpointRequest extends WatchpointRequest {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/BreakpointRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/BreakpointRequest.java
index c6d937e..259aa54 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/BreakpointRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/BreakpointRequest.java
@@ -46,7 +46,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface BreakpointRequest extends EventRequest, Locatable {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassPrepareRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassPrepareRequest.java
index 4bd1b78..efaf237 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassPrepareRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassPrepareRequest.java
@@ -47,7 +47,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassPrepareRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassUnloadRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassUnloadRequest.java
index 4335c03..2f2758e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassUnloadRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ClassUnloadRequest.java
@@ -46,7 +46,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ClassUnloadRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/DuplicateRequestException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/DuplicateRequestException.java
index 3412f23..fa8c078 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/DuplicateRequestException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/DuplicateRequestException.java
@@ -31,7 +31,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public class DuplicateRequestException extends RuntimeException {
     private static final long serialVersionUID = -3719784920313411060L;
 
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequest.java
index 137fdbb..062fc53 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequest.java
@@ -78,7 +78,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface EventRequest extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequestManager.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequestManager.java
index e3b421a..cfd53b7 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequestManager.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/EventRequestManager.java
@@ -44,7 +44,6 @@
  * @since  1.3
  */
 
-@jdk.Exported
 public interface EventRequestManager extends Mirror {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ExceptionRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ExceptionRequest.java
index 8de652f..5dad44e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ExceptionRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ExceptionRequest.java
@@ -43,7 +43,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ExceptionRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/InvalidRequestStateException.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/InvalidRequestStateException.java
index 6faab81..8bcd93e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/InvalidRequestStateException.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/InvalidRequestStateException.java
@@ -35,7 +35,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public class InvalidRequestStateException extends RuntimeException {
     private static final long serialVersionUID = -3774632428543322148L;
     public InvalidRequestStateException()
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodEntryRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodEntryRequest.java
index c31a1e7..8636b10 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodEntryRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodEntryRequest.java
@@ -44,7 +44,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface MethodEntryRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodExitRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodExitRequest.java
index 8c64b9f..f8a852a 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodExitRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MethodExitRequest.java
@@ -44,7 +44,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface MethodExitRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ModificationWatchpointRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ModificationWatchpointRequest.java
index 9946584..29247df 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ModificationWatchpointRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ModificationWatchpointRequest.java
@@ -55,6 +55,5 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ModificationWatchpointRequest extends WatchpointRequest {
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnterRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnterRequest.java
index 56c4625..2422dad 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnterRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnterRequest.java
@@ -45,7 +45,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorContendedEnterRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnteredRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnteredRequest.java
index cc36ea2..ad61772 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnteredRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorContendedEnteredRequest.java
@@ -45,7 +45,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorContendedEnteredRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitRequest.java
index 9cb162b..81433ca 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitRequest.java
@@ -45,7 +45,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorWaitRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitedRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitedRequest.java
index 6cc41fb..1b278ef 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitedRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/MonitorWaitedRequest.java
@@ -45,7 +45,6 @@
  * @author Swamy Venkataramanappa
  * @since  1.6
  */
-@jdk.Exported
 public interface MonitorWaitedRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/StepRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/StepRequest.java
index abcb249..df3c899 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/StepRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/StepRequest.java
@@ -43,7 +43,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface StepRequest extends EventRequest {
 
     /** Step into any newly pushed frames */
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadDeathRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadDeathRequest.java
index 916fff4..f39eb3e 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadDeathRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadDeathRequest.java
@@ -44,7 +44,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadDeathRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadStartRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadStartRequest.java
index c34d171..0ee00a0 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadStartRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/ThreadStartRequest.java
@@ -44,7 +44,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface ThreadStartRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/VMDeathRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/VMDeathRequest.java
index 69a767f..4aadcc9 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/VMDeathRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/VMDeathRequest.java
@@ -56,7 +56,6 @@
  * @author Robert Field
  * @since  1.4
  */
-@jdk.Exported
 public interface VMDeathRequest extends EventRequest {
 
 }
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/WatchpointRequest.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/WatchpointRequest.java
index 0b0de7e..9fb63ca 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/WatchpointRequest.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/WatchpointRequest.java
@@ -38,7 +38,6 @@
  * @author Robert Field
  * @since  1.3
  */
-@jdk.Exported
 public interface WatchpointRequest extends EventRequest {
 
     /**
diff --git a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/package-info.java b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/package-info.java
index add151d..1b430ca 100644
--- a/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/package-info.java
+++ b/jdk/src/jdk.jdi/share/classes/com/sun/jdi/request/package-info.java
@@ -42,5 +42,4 @@
  * extension.
  */
 
-@jdk.Exported
 package com.sun.jdi.request;
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java b/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java
index 8396a85..2087486 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectionNotificationInfo.java
@@ -82,7 +82,6 @@
  * </ul>
  **/
 
-@jdk.Exported
 public class GarbageCollectionNotificationInfo implements  CompositeDataView {
 
     private final String gcName;
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectorMXBean.java b/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectorMXBean.java
index 4963eac..0ee508d 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectorMXBean.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/GarbageCollectorMXBean.java
@@ -37,7 +37,6 @@
  * @author  Mandy Chung
  * @since   1.5
  */
-@jdk.Exported
 public interface GarbageCollectorMXBean
     extends java.lang.management.GarbageCollectorMXBean {
 
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/GcInfo.java b/jdk/src/jdk.management/share/classes/com/sun/management/GcInfo.java
index f256b08..ffb25e4 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/GcInfo.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/GcInfo.java
@@ -63,7 +63,6 @@
  * @author  Mandy Chung
  * @since   1.5
  */
-@jdk.Exported
 public class GcInfo implements CompositeData, CompositeDataView {
     private final long index;
     private final long startTime;
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java b/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java
index 1d64ae0..40d79a2 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java
@@ -47,7 +47,6 @@
  *
  * @see java.lang.management.ManagementFactory#getPlatformMXBeans(Class)
  */
-@jdk.Exported
 public interface HotSpotDiagnosticMXBean extends PlatformManagedObject {
     /**
      * Dumps the heap to the {@code outputFile} file in the same
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/OperatingSystemMXBean.java b/jdk/src/jdk.management/share/classes/com/sun/management/OperatingSystemMXBean.java
index edee07f..feb8e94 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/OperatingSystemMXBean.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/OperatingSystemMXBean.java
@@ -39,7 +39,6 @@
  * @author  Mandy Chung
  * @since   1.5
  */
-@jdk.Exported
 public interface OperatingSystemMXBean extends
     java.lang.management.OperatingSystemMXBean {
 
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java b/jdk/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java
index 4801bba..c45e49e 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java
@@ -38,7 +38,6 @@
  * @since   6u25
  */
 
-@jdk.Exported
 public interface ThreadMXBean extends java.lang.management.ThreadMXBean {
     /**
      * Returns the total CPU time for each thread whose ID is
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/UnixOperatingSystemMXBean.java b/jdk/src/jdk.management/share/classes/com/sun/management/UnixOperatingSystemMXBean.java
index f094f5c..d0b64f0 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/UnixOperatingSystemMXBean.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/UnixOperatingSystemMXBean.java
@@ -32,7 +32,6 @@
  * @author  Mandy Chung
  * @since   1.5
  */
-@jdk.Exported
 public interface UnixOperatingSystemMXBean extends
     com.sun.management.OperatingSystemMXBean {
 
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/VMOption.java b/jdk/src/jdk.management/share/classes/com/sun/management/VMOption.java
index bebe197..4d92900 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/VMOption.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/VMOption.java
@@ -52,7 +52,6 @@
  * @author Mandy Chung
  * @since 1.6
  */
-@jdk.Exported
 public class VMOption {
     private String name;
     private String value;
@@ -65,7 +64,6 @@
      *
      * @since 1.6
      */
-    @jdk.Exported
     public enum Origin {
         /**
          * The VM option has not been set and its value
diff --git a/jdk/src/jdk.management/share/classes/com/sun/management/package-info.java b/jdk/src/jdk.management/share/classes/com/sun/management/package-info.java
index 75808f5..92b200f 100644
--- a/jdk/src/jdk.management/share/classes/com/sun/management/package-info.java
+++ b/jdk/src/jdk.management/share/classes/com/sun/management/package-info.java
@@ -40,5 +40,4 @@
  * @since   1.5
  */
 
-@jdk.Exported
 package com.sun.management;
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AbstractNotificationHandler.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AbstractNotificationHandler.java
index 498897f..5cf4f80 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AbstractNotificationHandler.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AbstractNotificationHandler.java
@@ -39,7 +39,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class AbstractNotificationHandler<T>
     implements NotificationHandler<T>
 {
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Association.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Association.java
index 9d48b1f..79170dd 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Association.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Association.java
@@ -51,7 +51,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class Association {
     private final int associationID;
     private final int maxInStreams;
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AssociationChangeNotification.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AssociationChangeNotification.java
index 7aefc78..6799f3f 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AssociationChangeNotification.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/AssociationChangeNotification.java
@@ -29,7 +29,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class AssociationChangeNotification
     implements Notification
 {
@@ -38,7 +37,6 @@
      *
      * @since 1.7
      */
-    @jdk.Exported
     public enum AssocChangeEvent
     {
         /**
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/HandlerResult.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/HandlerResult.java
index b884f82..c4ca0a3 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/HandlerResult.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/HandlerResult.java
@@ -34,7 +34,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public enum HandlerResult {
     /**
      * Try to receieve another message or notification.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalReceiveException.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalReceiveException.java
index 7665817..a007c9e 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalReceiveException.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalReceiveException.java
@@ -31,7 +31,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class IllegalReceiveException extends IllegalStateException {
     private static final long serialVersionUID = 2296619040988576224L;
 
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalUnbindException.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalUnbindException.java
index 5ba8616..3d4a3de 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalUnbindException.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/IllegalUnbindException.java
@@ -31,7 +31,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class IllegalUnbindException extends IllegalStateException {
     private static final long serialVersionUID = -310540883995532224L;
 
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/InvalidStreamException.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/InvalidStreamException.java
index 0c0c93c..9c04372 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/InvalidStreamException.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/InvalidStreamException.java
@@ -30,7 +30,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class InvalidStreamException extends IllegalArgumentException {
     private static final long serialVersionUID = -9172703378046665558L;
 
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/MessageInfo.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/MessageInfo.java
index e3208f2..8fdd4e3 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/MessageInfo.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/MessageInfo.java
@@ -56,7 +56,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class MessageInfo {
     /**
      * Initializes a new instance of this class.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Notification.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Notification.java
index 7b15b23..e71b88e 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Notification.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/Notification.java
@@ -37,7 +37,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public interface Notification {
     /**
      * Returns the association that this notification is applicable to.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/NotificationHandler.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/NotificationHandler.java
index 27b357f..9e5f239 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/NotificationHandler.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/NotificationHandler.java
@@ -49,7 +49,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public interface NotificationHandler<T> {
     /**
      * Invoked when a notification is received from the SCTP stack.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/PeerAddressChangeNotification.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/PeerAddressChangeNotification.java
index 4eab3cb..f6f895e 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/PeerAddressChangeNotification.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/PeerAddressChangeNotification.java
@@ -32,7 +32,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class PeerAddressChangeNotification
     implements Notification
 {
@@ -47,7 +46,6 @@
      *
      * @since 1.7
      */
-    @jdk.Exported
     public enum AddressChangeEvent {
         /**
          * This address is now reachable.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java
index 065b130..c704332 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpChannel.java
@@ -134,7 +134,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class SctpChannel
     extends AbstractSelectableChannel
 {
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
index aa32a74..5294143 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpMultiChannel.java
@@ -134,7 +134,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class SctpMultiChannel
     extends AbstractSelectableChannel
 {
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java
index 0e9b9c3..4a2ced9 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpServerChannel.java
@@ -68,7 +68,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class SctpServerChannel
     extends AbstractSelectableChannel
 {
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpSocketOption.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpSocketOption.java
index 72c92f5..2b4d0ab 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpSocketOption.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpSocketOption.java
@@ -35,5 +35,4 @@
  *
  * @see SctpStandardSocketOptions
  */
-@jdk.Exported
 public interface SctpSocketOption<T> extends SocketOption<T> { }
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java
index 75e5c0c..27f175c 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java
@@ -34,7 +34,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public class SctpStandardSocketOptions {
     private SctpStandardSocketOptions() {}
     /**
@@ -316,7 +315,6 @@
      *
      * @since 1.7
      */
-    @jdk.Exported
     public static class InitMaxStreams {
         private int maxInStreams;
         private int maxOutStreams;
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SendFailedNotification.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SendFailedNotification.java
index d69a666..22abe88 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SendFailedNotification.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/SendFailedNotification.java
@@ -37,7 +37,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class SendFailedNotification implements Notification {
     /**
      * Initializes a new instance of this class.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/ShutdownNotification.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/ShutdownNotification.java
index 90f66b9..2a8d7ba 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/ShutdownNotification.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/ShutdownNotification.java
@@ -32,7 +32,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public abstract class ShutdownNotification implements Notification {
     /**
      * Initializes a new instance of this class.
diff --git a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/package-info.java b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/package-info.java
index ac9cca9..0cf19db 100644
--- a/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/package-info.java
+++ b/jdk/src/jdk.sctp/share/classes/com/sun/nio/sctp/package-info.java
@@ -72,5 +72,4 @@
  * @since 1.7
  */
 
-@jdk.Exported
 package com.sun.nio.sctp;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/LdapPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/LdapPrincipal.java
index 6a324ee..6af3942 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/LdapPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/LdapPrincipal.java
@@ -45,7 +45,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public final class LdapPrincipal implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = 6820120005580754861L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java
index 995732e..2b15a50 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTDomainPrincipal.java
@@ -45,7 +45,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTDomainPrincipal implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = -4408637351440771220L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java
index eca8158..480e400 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTNumericCredential.java
@@ -30,7 +30,6 @@
  * and provides a mechanism to do same-process security impersonation.
  */
 
-@jdk.Exported
 public class NTNumericCredential {
 
     private long impersonationToken;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSid.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSid.java
index a304eeb..602e817 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSid.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSid.java
@@ -47,7 +47,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTSid implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = 4412290580770249885L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java
index 0911f79..2b033bb 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidDomainPrincipal.java
@@ -43,7 +43,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTSidDomainPrincipal extends NTSid {
 
     private static final long serialVersionUID = 5247810785821650912L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java
index 9bdc87b..d63451e 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidGroupPrincipal.java
@@ -40,7 +40,6 @@
  * @see javax.security.auth.Subject
  * @see com.sun.security.auth.NTSid
  */
-@jdk.Exported
 public class NTSidGroupPrincipal extends NTSid {
 
     private static final long serialVersionUID = -1373347438636198229L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java
index 1d33ee3..7a482a7 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidPrimaryGroupPrincipal.java
@@ -39,7 +39,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTSidPrimaryGroupPrincipal extends NTSid {
 
     private static final long serialVersionUID = 8011978367305190527L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java
index c95d82a..b2e583d 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTSidUserPrincipal.java
@@ -39,7 +39,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTSidUserPrincipal extends NTSid {
 
     private static final long serialVersionUID = -5573239889517749525L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java
index 1005793..687682b 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/NTUserPrincipal.java
@@ -41,7 +41,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class NTUserPrincipal implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = -8737649811939033735L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PolicyFile.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PolicyFile.java
index e61e821..38a9709 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PolicyFile.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PolicyFile.java
@@ -215,7 +215,6 @@
  * @see java.security.ProtectionDomain
  * @see java.security.Security security properties
  */
-@jdk.Exported(false)
 @Deprecated
 public class PolicyFile extends javax.security.auth.Policy {
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PrincipalComparator.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PrincipalComparator.java
index bb0aab1..db90f09 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PrincipalComparator.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/PrincipalComparator.java
@@ -50,7 +50,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public interface PrincipalComparator {
     /**
      * Check if the specified {@code Subject} is implied by
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java
index 377e616..983e987 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericGroupPrincipal.java
@@ -45,7 +45,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported(false)
 @Deprecated
 public class SolarisNumericGroupPrincipal implements
                                         Principal,
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java
index 5497856..5068526 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisNumericUserPrincipal.java
@@ -44,7 +44,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported(false)
 @Deprecated
 public class SolarisNumericUserPrincipal implements
                                         Principal,
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java
index 4aef765..3350e08 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/SolarisPrincipal.java
@@ -44,7 +44,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported(false)
 @Deprecated
 public class SolarisPrincipal implements Principal, java.io.Serializable {
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java
index 4a96480..f71aa12 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java
@@ -41,7 +41,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class UnixNumericGroupPrincipal implements
                                         Principal,
                                         java.io.Serializable {
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java
index cb252a8..e07cb8a 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericUserPrincipal.java
@@ -41,7 +41,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class UnixNumericUserPrincipal implements
                                         Principal,
                                         java.io.Serializable {
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java
index 9694bc7..1215015 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixPrincipal.java
@@ -41,7 +41,6 @@
  * @see java.security.Principal
  * @see javax.security.auth.Subject
  */
-@jdk.Exported
 public class UnixPrincipal implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = -2951667807323493631L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UserPrincipal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UserPrincipal.java
index f4e7555..04b133e 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UserPrincipal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/UserPrincipal.java
@@ -42,7 +42,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public final class UserPrincipal implements Principal, java.io.Serializable {
 
     private static final long serialVersionUID = 892106070870210969L;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java
index 52fdcf8..736309fd 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/X500Principal.java
@@ -49,7 +49,6 @@
  *             class.
  * @see javax.security.auth.x500.X500Principal
 */
-@jdk.Exported(false)
 @Deprecated
 public class X500Principal implements Principal, java.io.Serializable {
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java
index 4d6f7b6..9170f75 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/TextCallbackHandler.java
@@ -46,7 +46,6 @@
  * @see javax.security.auth.callback
  */
 
-@jdk.Exported
 public class TextCallbackHandler implements CallbackHandler {
     private final CallbackHandler consoleHandler;
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/package-info.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/package-info.java
index 61d6568..8786680 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/package-info.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/callback/package-info.java
@@ -23,5 +23,4 @@
  * questions.
  */
 
-@jdk.Exported
 package com.sun.security.auth.callback;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/ConfigFile.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/ConfigFile.java
index 5305817..3e6dc7d 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/ConfigFile.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/ConfigFile.java
@@ -83,7 +83,6 @@
  * @see javax.security.auth.login.LoginContext
  * @see java.security.Security security properties
  */
-@jdk.Exported
 public class ConfigFile extends Configuration {
 
     private final sun.security.provider.ConfigFile.Spi spi;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/package-info.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/package-info.java
index a0b207c..45a01ea 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/package-info.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/login/package-info.java
@@ -23,5 +23,4 @@
  * questions.
  */
 
-@jdk.Exported
 package com.sun.security.auth.login;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/JndiLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/JndiLoginModule.java
index bc7a1a9..1642e43 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/JndiLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/JndiLoginModule.java
@@ -151,7 +151,6 @@
  * </pre>
  *
  */
-@jdk.Exported
 public class JndiLoginModule implements LoginModule {
 
     private static final ResourceBundle rb = AccessController.doPrivileged(
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java
index ece0d3f..92ec5bc 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/KeyStoreLoginModule.java
@@ -110,7 +110,6 @@
  *
  * </dl>
  */
-@jdk.Exported
 public class KeyStoreLoginModule implements LoginModule {
 
     private static final ResourceBundle rb = AccessController.doPrivileged(
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/Krb5LoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/Krb5LoginModule.java
index b4360c7..8f09436 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/Krb5LoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/Krb5LoginModule.java
@@ -367,7 +367,6 @@
  * @author Ram Marti
  */
 
-@jdk.Exported
 public class Krb5LoginModule implements LoginModule {
 
     // initial state
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java
index 167530a..7c2da184 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/LdapLoginModule.java
@@ -303,7 +303,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public class LdapLoginModule implements LoginModule {
 
     // Use the default classloader for this class to load the prompt strings.
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java
index 98d1f13..c251d54 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTLoginModule.java
@@ -57,7 +57,6 @@
  *
  * @see javax.security.auth.spi.LoginModule
  */
-@jdk.Exported
 public class NTLoginModule implements LoginModule {
 
     private NTSystem ntSystem;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTSystem.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTSystem.java
index d156369..9dbd693 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTSystem.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/NTSystem.java
@@ -30,7 +30,6 @@
  * security information for the current user.
  *
  */
-@jdk.Exported
 public class NTSystem {
 
     private native void getCurrent(boolean debug);
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisLoginModule.java
index 9b5adb0..f5666ff 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisLoginModule.java
@@ -52,7 +52,6 @@
  *             UnixLoginModule.
  *
  */
-@jdk.Exported(false)
 @Deprecated
 public class SolarisLoginModule implements LoginModule {
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisSystem.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisSystem.java
index 98f6f4c..ea4842a 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisSystem.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/SolarisSystem.java
@@ -31,7 +31,6 @@
  *
  * @deprecated replaced by {@link UnixSystem}.
  */
-@jdk.Exported(false)
 @Deprecated
 public class SolarisSystem {
 
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java
index 704b11d..a2acf7a 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixLoginModule.java
@@ -47,7 +47,6 @@
  * debug messages will be output to the output stream, System.out.
  *
  */
-@jdk.Exported
 public class UnixLoginModule implements LoginModule {
 
     // initial state
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixSystem.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixSystem.java
index 43f93f7..46b1c94 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixSystem.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/UnixSystem.java
@@ -29,7 +29,6 @@
  * This class implementation retrieves and makes available Unix
  * UID/GID/groups information for the current user.
  */
-@jdk.Exported
 public class UnixSystem {
 
     private native void getUnixInfo();
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/package-info.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/package-info.java
index 2156967..9056324 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/package-info.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/module/package-info.java
@@ -23,5 +23,4 @@
  * questions.
  */
 
-@jdk.Exported
 package com.sun.security.auth.module;
diff --git a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/package-info.java b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/package-info.java
index 3fe7e20..c0397bf 100644
--- a/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/package-info.java
+++ b/jdk/src/jdk.security.auth/share/classes/com/sun/security/auth/package-info.java
@@ -23,5 +23,4 @@
  * questions.
  */
 
-@jdk.Exported
 package com.sun.security.auth;
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/AuthorizationDataEntry.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/AuthorizationDataEntry.java
index 5ec9e61..eabaac9 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/AuthorizationDataEntry.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/AuthorizationDataEntry.java
@@ -28,7 +28,6 @@
 /**
  * Kerberos 5 AuthorizationData entry.
  */
-@jdk.Exported
 public final class AuthorizationDataEntry {
 
     private final int type;
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSContext.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSContext.java
index 32e6b04..3496a5f 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSContext.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSContext.java
@@ -34,7 +34,6 @@
  * functionalities not defined by {@code org.ietf.jgss.GSSContext},
  * such as querying context-specific attributes.
  */
-@jdk.Exported
 public interface ExtendedGSSContext extends GSSContext {
 
     // The impl is almost identical to GSSContextImpl with only 2 differences:
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSCredential.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSCredential.java
index 56fe103..0e95827 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSCredential.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/ExtendedGSSCredential.java
@@ -33,7 +33,6 @@
  * functionalities not defined by {@code org.ietf.jgss.GSSCredential}.
  * @since 1.8
  */
-@jdk.Exported
 public interface ExtendedGSSCredential extends GSSCredential {
 
     static class ExtendedGSSCredentialImpl extends GSSCredentialImpl
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/GSSUtil.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/GSSUtil.java
index 2358c58..e1f63c2 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/GSSUtil.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/GSSUtil.java
@@ -33,7 +33,6 @@
  * GSS-API Utilities for using in conjunction with Sun Microsystem's
  * implementation of Java GSS-API.
  */
-@jdk.Exported
 public class GSSUtil {
 
     /**
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireSecContextPermission.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireSecContextPermission.java
index f8e850c..618d3c7 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireSecContextPermission.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireSecContextPermission.java
@@ -35,7 +35,6 @@
  *
  * <p>The target name is the {@link InquireType} allowed.
  */
-@jdk.Exported
 public final class InquireSecContextPermission extends BasicPermission {
     private static final long serialVersionUID = -7131173349668647297L;
 
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireType.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireType.java
index 09d407a..5ba482d 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireType.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/InquireType.java
@@ -29,7 +29,6 @@
  * Attribute types that can be specified as an argument of
  * {@link com.sun.security.jgss.ExtendedGSSContext#inquireSecContext}
  */
-@jdk.Exported
 public enum InquireType {
     /**
      * Attribute type for retrieving the session key of an established
diff --git a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/package-info.java b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/package-info.java
index b1c82d7..5bd43c8 100644
--- a/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/package-info.java
+++ b/jdk/src/jdk.security.jgss/share/classes/com/sun/security/jgss/package-info.java
@@ -23,5 +23,4 @@
  * questions.
  */
 
-@jdk.Exported
 package com.sun.security.jgss;
diff --git a/jdk/test/java/io/RandomAccessFile/FileLengthTest.java b/jdk/test/java/io/RandomAccessFile/FileLengthTest.java
new file mode 100644
index 0000000..3f5bff1
--- /dev/null
+++ b/jdk/test/java/io/RandomAccessFile/FileLengthTest.java
@@ -0,0 +1,137 @@
+/*
+ * 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 randomAccessFile 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 4823133
+ * @summary optimize RandomAccessFile.length() and length() is thread safe now.
+ */
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+/**
+ *
+ * @author vyom.tewari@oracle.com
+ */
+public class FileLengthTest {
+
+    private static final int BUF_SIZE = 4096;
+    private static RandomAccessFile randomAccessFile;
+    private static Thread fileLengthCaller;
+    private static Thread fileContentReader;
+    private static StringBuilder fileContents;
+    private static volatile boolean isFailed = false;
+
+    /**
+     * this thread will call length() in loop
+     */
+    private static void startLengthThread() {
+        if (randomAccessFile == null) {
+            return;
+        }
+        fileLengthCaller = new Thread(() -> {
+            while (true) {
+                try {
+                    long length = randomAccessFile.length();
+                    if (length < 0) {
+                        return;
+                    }
+                } catch (IOException ex) {
+                    return;
+                }
+            }
+        });
+        fileLengthCaller.setName("RandomAccessFile-length-caller");
+        fileLengthCaller.setDaemon(true);
+        fileLengthCaller.start();
+    }
+
+    /**
+     * this thread will call read() and store the content in internal buffer.
+     */
+    private static void startReaderThread() {
+        if (randomAccessFile == null) {
+            return;
+        }
+        fileContentReader = new Thread(() -> {
+            StringBuilder sb = new StringBuilder(BUF_SIZE);
+            int i;
+            byte arr[] = new byte[8];
+            try {
+                while ((i = randomAccessFile.read(arr)) != -1) {
+                    sb.append(new String(arr, 0, i));
+                }
+                if (!sb.toString().equals(fileContents.toString())) {
+                    isFailed = true;
+                }
+            } catch (IOException ex) {
+            }
+        });
+        fileContentReader.setName("RandomAccessFile-content-reader");
+        fileContentReader.setDaemon(true);
+        fileContentReader.start();
+    }
+
+    public static void main(String args[]) {
+        byte arr[] = new byte[BUF_SIZE];
+        String testFile = "testfile.txt";
+        try {
+            createDummyFile(testFile);
+            File file = new File(testFile);
+            file.deleteOnExit();
+            randomAccessFile = new RandomAccessFile(file, "r");
+            int count = randomAccessFile.read(arr);
+            randomAccessFile.seek(0);
+            fileContents = new StringBuilder(BUF_SIZE);
+            fileContents.append(new String(arr, 0, count));
+            startLengthThread();
+            startReaderThread();
+            fileContentReader.join();
+        } catch (FileNotFoundException | InterruptedException ex) {
+        } catch (IOException ex) {
+        } finally {
+            try {
+                randomAccessFile.close();
+            } catch (IOException ex) {
+            }
+        }
+        if (isFailed) {
+            throw new RuntimeException("RandomAccessFile.length() changed the underlying file pointer.");
+        }
+    }
+
+    private static void createDummyFile(String fileName) throws FileNotFoundException, IOException {
+        try (FileOutputStream outputStream = new FileOutputStream(new File(fileName))) {
+            String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+            int count = 0;
+            while ((count + str.length()) < BUF_SIZE) {
+                outputStream.write(str.getBytes());
+                count += str.length();
+            }
+            outputStream.flush();
+        }
+    }
+}
diff --git a/jdk/test/java/lang/ProcessHandle/Basic.java b/jdk/test/java/lang/ProcessHandle/Basic.java
index 3df63e9..dae3795 100644
--- a/jdk/test/java/lang/ProcessHandle/Basic.java
+++ b/jdk/test/java/lang/ProcessHandle/Basic.java
@@ -27,8 +27,8 @@
 import static org.testng.Assert.fail;
 
 import java.io.IOException;
-import java.util.Optional;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.testng.TestNG;
@@ -36,6 +36,8 @@
 
 /*
  * @test
+ * @library /test/lib/share/classes
+ * @run testng InfoTest
  * @summary Basic tests for ProcessHandler
  * @author Roger Riggs
  */
diff --git a/jdk/test/java/lang/ProcessHandle/InfoTest.java b/jdk/test/java/lang/ProcessHandle/InfoTest.java
index 38b1546..bca423b 100644
--- a/jdk/test/java/lang/ProcessHandle/InfoTest.java
+++ b/jdk/test/java/lang/ProcessHandle/InfoTest.java
@@ -21,11 +21,10 @@
  * questions.
  */
 
-import java.io.File;
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.UncheckedIOException;
-import java.lang.ProcessBuilder;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -40,18 +39,18 @@
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
-import jdk.testlibrary.Platform;
-import jdk.testlibrary.Utils;
-
+import jdk.test.lib.Platform;
+import jdk.test.lib.Utils;
 import org.testng.Assert;
-import org.testng.annotations.Test;
 import org.testng.TestNG;
+import org.testng.annotations.Test;
 
 /*
  * @test
  * @bug 8077350 8081566 8081567 8098852 8136597
- * @build jdk.testlibrary.*
- * @library /lib/testlibrary
+ * @library /test/lib/share/classes
+ * @build jdk.test.lib.Platform jdk.test.lib.Utils
+ * @run testng InfoTest
  * @summary Functions of ProcessHandle.Info
  * @author Roger Riggs
  * @key intermittent
diff --git a/jdk/test/java/lang/ProcessHandle/OnExitTest.java b/jdk/test/java/lang/ProcessHandle/OnExitTest.java
index 9c7a519..3ec997d 100644
--- a/jdk/test/java/lang/ProcessHandle/OnExitTest.java
+++ b/jdk/test/java/lang/ProcessHandle/OnExitTest.java
@@ -22,7 +22,6 @@
  */
 
 import java.io.IOException;
-import java.lang.InterruptedException;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -31,7 +30,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 
-import jdk.testlibrary.Utils;
+import jdk.test.lib.Utils;
 
 import org.testng.annotations.Test;
 import org.testng.Assert;
@@ -39,7 +38,9 @@
 
 /*
  * @test
- * @build jdk.testlibrary.Utils
+ * @library /test/lib/share/classes
+ * @build jdk.test.lib.Platform jdk.test.lib.Utils
+ * @run testng OnExitTest
  * @summary Functions of Process.onExit and ProcessHandle.onExit
  * @author Roger Riggs
  */
diff --git a/jdk/test/java/lang/ProcessHandle/PermissionTest.java b/jdk/test/java/lang/ProcessHandle/PermissionTest.java
index 042b9d1..7d596c2 100644
--- a/jdk/test/java/lang/ProcessHandle/PermissionTest.java
+++ b/jdk/test/java/lang/ProcessHandle/PermissionTest.java
@@ -31,7 +31,6 @@
 import java.security.ProtectionDomain;
 import java.security.SecurityPermission;
 import java.util.Arrays;
-import java.util.Optional;
 import java.util.PropertyPermission;
 
 import org.testng.Assert;
@@ -39,6 +38,12 @@
 import org.testng.annotations.BeforeGroups;
 import org.testng.annotations.Test;
 
+/*
+ * @test
+ * @run testng/othervm PermissionTest
+ * @summary Test Permissions to access Info
+ */
+
 public class PermissionTest {
     /**
      * Backing up policy.
diff --git a/jdk/test/java/lang/ProcessHandle/ProcessUtil.java b/jdk/test/java/lang/ProcessHandle/ProcessUtil.java
index c0c6916..48654ea 100644
--- a/jdk/test/java/lang/ProcessHandle/ProcessUtil.java
+++ b/jdk/test/java/lang/ProcessHandle/ProcessUtil.java
@@ -23,19 +23,14 @@
 
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
-import java.lang.ProcessBuilder;
 import java.time.Duration;
 import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import com.sun.management.OperatingSystemMXBean;
-
-import jdk.testlibrary.Platform;
-
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import com.sun.management.OperatingSystemMXBean;
+import jdk.test.lib.Platform;
+
 /**
  * Useful utilities for testing Process and ProcessHandle.
  */
diff --git a/jdk/test/java/lang/ProcessHandle/TEST.properties b/jdk/test/java/lang/ProcessHandle/TEST.properties
deleted file mode 100644
index ca15632..0000000
--- a/jdk/test/java/lang/ProcessHandle/TEST.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# ProcessHandle tests use TestNG
-TestNG.dirs = .
-lib.dirs = /lib/testlibrary
-modules = jdk.management
diff --git a/jdk/test/java/lang/ProcessHandle/TreeTest.java b/jdk/test/java/lang/ProcessHandle/TreeTest.java
index 45acc6f..85b752a 100644
--- a/jdk/test/java/lang/ProcessHandle/TreeTest.java
+++ b/jdk/test/java/lang/ProcessHandle/TreeTest.java
@@ -23,30 +23,31 @@
 
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.time.Duration;
 import java.time.Instant;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import java.util.concurrent.ExecutionException;
-import jdk.testlibrary.Utils;
+
+import jdk.test.lib.Utils;
 import org.testng.Assert;
 import org.testng.TestNG;
 import org.testng.annotations.Test;
 
 /*
  * @test
- * @library /lib/testlibrary
- * Test counting and JavaChild.spawning and counting of Processes.
- * @run testng/othervm InfoTest
+ * @library /test/lib/share/classes
+ * @build jdk.test.lib.Utils
+ * @run testng/othervm TreeTest
+ * @summary Test counting and JavaChild.spawning and counting of Processes.
  * @key intermittent
  * @author Roger Riggs
  */
diff --git a/jdk/test/java/lang/management/MemoryMXBean/Pending.java b/jdk/test/java/lang/management/MemoryMXBean/Pending.java
index 728ff15..1567082 100644
--- a/jdk/test/java/lang/management/MemoryMXBean/Pending.java
+++ b/jdk/test/java/lang/management/MemoryMXBean/Pending.java
@@ -24,7 +24,7 @@
 /*
  * @test
  * @bug     4530538
- * @modules java.base/sun.misc
+ * @modules java.base/jdk.internal.misc
  *          java.management
  * @summary Basic unit test of
  *          RuntimeMXBean.getObjectPendingFinalizationCount()
@@ -50,10 +50,10 @@
     private static void printFinalizerInstanceCount() {
         if (!trace) return;
 
-        int count = sun.misc.VM.getFinalRefCount();
+        int count = jdk.internal.misc.VM.getFinalRefCount();
         System.out.println(INDENT + "Finalizable object Count = " + count);
 
-        count = sun.misc.VM.getPeakFinalRefCount();
+        count = jdk.internal.misc.VM.getPeakFinalRefCount();
         System.out.println(INDENT + "Peak Finalizable object Count = " + count);
     }
 
diff --git a/jdk/test/java/net/SocketOption/OptionsTest.java b/jdk/test/java/net/SocketOption/OptionsTest.java
index 5493c2c..947d784 100644
--- a/jdk/test/java/net/SocketOption/OptionsTest.java
+++ b/jdk/test/java/net/SocketOption/OptionsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 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
@@ -80,8 +80,11 @@
     static NetworkInterface getNetworkInterface() {
         try {
             Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
-            if (nifs.hasMoreElements()) {
-                return (NetworkInterface)nifs.nextElement();
+            while (nifs.hasMoreElements()) {
+                NetworkInterface ni = (NetworkInterface)nifs.nextElement();
+                if (ni.supportsMulticast()) {
+                    return ni;
+                }
             }
         } catch (Exception e) {
         }
diff --git a/jdk/test/java/net/URLConnection/TIFFContentGuesser.java b/jdk/test/java/net/URLConnection/TIFFContentGuesser.java
new file mode 100644
index 0000000..c996b7a
--- /dev/null
+++ b/jdk/test/java/net/URLConnection/TIFFContentGuesser.java
@@ -0,0 +1,66 @@
+/*
+ * 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 8146041
+ * @summary java.net.URLConnection.guessContentTypeFromStream() does not
+ * recognize TIFF streams
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.URLConnection;
+
+public class TIFFContentGuesser {
+    private static final byte[] LITTLE_ENDIAN_MAGIC =
+        new byte[] {(byte)0x49, (byte)0x49, (byte)0x2a, (byte)0};
+    private static final byte[] BIG_ENDIAN_MAGIC =
+        new byte[] {(byte)0x4d, (byte)0x4d, (byte)0, (byte)0x2a};
+
+    private static final String TIFF_MIME_TYPE = "image/tiff";
+
+    public static void main(String[] args) throws Throwable {
+        int failures = 0;
+
+        InputStream stream = new ByteArrayInputStream(LITTLE_ENDIAN_MAGIC);
+        String contentType = URLConnection.guessContentTypeFromStream(stream);
+        if (contentType == null || !contentType.equals(TIFF_MIME_TYPE)) {
+            failures++;
+            System.err.println("Test failed for little endian magic");
+        }
+
+        stream = new ByteArrayInputStream(BIG_ENDIAN_MAGIC);
+        contentType = URLConnection.guessContentTypeFromStream(stream);
+        if (contentType == null || !contentType.equals(TIFF_MIME_TYPE)) {
+            failures++;
+            System.err.println("Test failed for big endian magic");
+        }
+
+        if (failures != 0) {
+            throw new RuntimeException
+                ("Test failed with " + failures +  " error(s)");
+        }
+    }
+}
+
diff --git a/jdk/test/java/net/ipv6tests/TcpTest.java b/jdk/test/java/net/ipv6tests/TcpTest.java
index 5f72553..63008ac 100644
--- a/jdk/test/java/net/ipv6tests/TcpTest.java
+++ b/jdk/test/java/net/ipv6tests/TcpTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2010, 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
@@ -60,8 +60,7 @@
         dprintln ("Local Addresses");
         dprintln (ia4addr.toString());
         dprintln (ia6addr.toString());
-        test1 (0);
-        test1 (5100);
+        test1();
         test2();
         test3();
         test4();
@@ -69,11 +68,9 @@
 
     /* basic TCP connectivity test using IPv6 only and IPv4/IPv6 together */
 
-    static void test1 (int port) throws Exception {
-        server = new ServerSocket (port);
-        if (port == 0) {
-            port = server.getLocalPort();
-        }
+    static void test1 () throws Exception {
+        server = new ServerSocket (0);
+        int port = server.getLocalPort();
         // try Ipv6 only
         c1 = new Socket ("::1", port);
         s1 = server.accept ();
@@ -107,9 +104,7 @@
     /** bind tests:
      *  1. bind to specific address IPv4 only (any port)
      *  2. bind to specific address IPv6 only (any port)
-     *  3. bind to specific address IPv4 only (specific port)
-     *  4. bind to specific address IPv4 only (specific port)
-     *  5. bind to any address IPv4 (test collision)
+     *  3. bind to any address IPv4 (test collision)
      */
 
     static void test2 () throws Exception {
@@ -147,39 +142,6 @@
         server.close ();
         c1.close ();
 
-        /* now try IPv6 specific port only */
-
-        server = new ServerSocket ();
-        sadr = new InetSocketAddress (ia6addr, 5200);
-        server.bind (sadr);
-        port = server.getLocalPort();
-        t_assert (port == 5200);
-
-        c1 = new Socket (ia6addr, port);
-        try {
-            c2 = new Socket (ia4addr, port);
-            throw new RuntimeException ("connect to IPv4 address should be refused");
-        } catch (IOException e) { }
-        server.close ();
-        c1.close ();
-
-        /* now try IPv4 specific port only */
-
-        server = new ServerSocket ();
-        sadr = new InetSocketAddress (ia4addr, 5200);
-        server.bind (sadr);
-        port = server.getLocalPort();
-        t_assert (port == 5200);
-
-        c1 = new Socket (ia4addr, port);
-
-        try {
-            c2 = new Socket (ia6addr, port);
-            throw new RuntimeException ("connect to IPv6 address should be refused");
-        } catch (IOException e) { }
-        server.accept().close();
-        c1.close ();
-        server.close();
         System.out.println ("Test2: OK");
     }
 
@@ -242,3 +204,4 @@
         System.out.println ("Test4: OK");
     }
 }
+
diff --git a/jdk/test/java/nio/channels/DatagramChannel/StressNativeSignal.java b/jdk/test/java/nio/channels/DatagramChannel/StressNativeSignal.java
new file mode 100644
index 0000000..b21d68a
--- /dev/null
+++ b/jdk/test/java/nio/channels/DatagramChannel/StressNativeSignal.java
@@ -0,0 +1,147 @@
+/*
+ * 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 8050499
+ * @summary Attempt to provoke error 316 on OS X in NativeSignal.signal()
+ */
+
+import java.io.*;
+import java.net.*;
+import java.nio.ByteBuffer;
+import java.nio.channels.DatagramChannel;
+
+public class StressNativeSignal {
+    private UDPThread udpThread;
+    private ServerSocketThread serverSocketThread;
+
+    StressNativeSignal() {
+        try {
+            serverSocketThread = new ServerSocketThread();
+            serverSocketThread.start();
+
+            udpThread = new UDPThread();
+            udpThread.start();
+        } catch (Exception z) {
+            z.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) throws Throwable {
+        StressNativeSignal test = new StressNativeSignal();
+        try {
+            Thread.sleep(3000);
+        } catch (Exception z) {
+            z.printStackTrace(System.err);
+        }
+
+        test.shutdown();
+    }
+
+    public void shutdown() {
+        udpThread.terminate();
+        try {
+            udpThread.join();
+        } catch (Exception z) {
+            z.printStackTrace(System.err);
+        }
+
+        serverSocketThread.terminate();
+        try {
+            serverSocketThread.join();
+        } catch (Exception z) {
+            z.printStackTrace(System.err);
+        }
+    }
+
+    public class ServerSocketThread extends Thread {
+        private volatile boolean shouldTerminate;
+        private ServerSocket socket;
+
+        public void run() {
+            try {
+                socket = new ServerSocket(1122);
+                Socket client = socket.accept();
+                BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
+                shouldTerminate = false;
+                while (!shouldTerminate) {
+                    String msg = reader.readLine();
+                }
+            } catch (Exception z) {
+                if (!shouldTerminate) {
+                    z.printStackTrace(System.err);
+                }
+            }
+        }
+
+        public void terminate() {
+            shouldTerminate = true;
+            try {
+                socket.close();
+            } catch (Exception z) {
+                z.printStackTrace(System.err);
+                // ignore
+            }
+        }
+    }
+
+    public class UDPThread extends Thread {
+        private DatagramChannel channel;
+        private volatile boolean shouldTerminate;
+
+        @Override
+        public void run() {
+            try {
+                channel = DatagramChannel.open();
+                channel.setOption(StandardSocketOptions.SO_RCVBUF, 6553600);
+                channel.bind(new InetSocketAddress(19870));
+            } catch (IOException z) {
+                z.printStackTrace(System.err);
+            }
+
+            ByteBuffer buf = ByteBuffer.allocate(6553600);
+            shouldTerminate = false;
+            while (!shouldTerminate) {
+                try {
+                    buf.rewind();
+                    channel.receive(buf);
+                } catch (IOException z) {
+                    if (!shouldTerminate) {
+                        z.printStackTrace(System.err);
+                    }
+                }
+            }
+        }
+
+        public void terminate() {
+            shouldTerminate = true;
+            try {
+                channel.close();
+            } catch (Exception z) {
+                z.printStackTrace(System.err);
+                // ignore
+            }
+        }
+    }
+
+}
diff --git a/jdk/test/java/nio/file/attribute/BasicFileAttributeView/UnixSocketFile.java b/jdk/test/java/nio/file/attribute/BasicFileAttributeView/UnixSocketFile.java
index caa712e..7641580 100644
--- a/jdk/test/java/nio/file/attribute/BasicFileAttributeView/UnixSocketFile.java
+++ b/jdk/test/java/nio/file/attribute/BasicFileAttributeView/UnixSocketFile.java
@@ -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,6 +28,7 @@
  */
 
 import java.io.File;
+import java.io.InputStream;
 import java.io.IOException;
 import java.nio.file.FileSystem;
 import java.nio.file.FileSystems;
@@ -49,6 +50,17 @@
     public static void main(String[] args)
         throws InterruptedException, IOException {
 
+        // Use 'which' to verify that 'nc' is available and skip the test
+        // if it is not.
+        Process proc = Runtime.getRuntime().exec("which nc");
+        InputStream stdout = proc.getInputStream();
+        int b = stdout.read();
+        proc.destroy();
+        if (b == -1) {
+            System.err.println("Netcat command unavailable; skipping test.");
+            return;
+        }
+
         // Create a new sub-directory of the nominal test directory in which
         // 'nc' will create the socket file.
         String testSubDir = System.getProperty("test.dir", ".")
@@ -62,7 +74,6 @@
 
         // Create a process which executes the nc (netcat) utility to create
         // a socket file at the indicated location.
-        Process proc;
         FileSystem fs = FileSystems.getDefault();
         try (WatchService ws = fs.newWatchService()) {
             // Watch the test sub-directory to receive notification when an
diff --git a/jdk/test/java/sql/testng/test/sql/StatementTests.java b/jdk/test/java/sql/testng/test/sql/StatementTests.java
index 169b734..88697b7 100644
--- a/jdk/test/java/sql/testng/test/sql/StatementTests.java
+++ b/jdk/test/java/sql/testng/test/sql/StatementTests.java
@@ -65,7 +65,7 @@
      * enquoteLiteral is null
      */
     @Test(expectedExceptions = NullPointerException.class)
-    public void test01()  throws SQLException {
+    public void test01() throws SQLException {
         stmt.enquoteLiteral(null);
 
     }
@@ -110,7 +110,7 @@
     }
 
     /*
-     * Validate a NullPointerException is thrown is the string passed to
+     * Validate a NullPointerException is thrown if the string passed to
      * isSimpleIdentifier is null
      */
     @Test(expectedExceptions = NullPointerException.class)
@@ -120,6 +120,24 @@
     }
 
     /*
+     * Verify that enquoteLiteral creates a  valid literal and converts every
+     * single quote to two single quotes
+     */
+    @Test(dataProvider = "validEnquotedNCharLiteralValues")
+    public void test07(String s, String expected) throws SQLException {
+        assertEquals(stmt.enquoteNCharLiteral(s), expected);
+    }
+
+    /*
+     * Validate a NullPointerException is thrown if the string passed to
+     * enquoteNCharLiteral is null
+     */
+    @Test(expectedExceptions = NullPointerException.class)
+    public void test08() throws SQLException {
+        stmt.enquoteNCharLiteral(null);
+    }
+
+    /*
      * DataProvider used to provide strings that will be used to validate
      * that enquoteLiteral converts a string to a literal and every instance of
      * a single quote will be converted into two single quotes in the literal.
@@ -169,8 +187,7 @@
             {"\"Hel\"lo\"", true},
             {"Hello" + '\0', false},
             {"", false},
-            {maxIdentifier + 'a', false},
-            };
+            {maxIdentifier + 'a', false},};
     }
 
     /*
@@ -194,4 +211,22 @@
             {"", false},};
     }
 
+    /*
+     * DataProvider used to provide strings that will be used to validate
+     * that enquoteNCharLiteral converts a string to a National Character
+     * literal and every instance of
+     * a single quote will be converted into two single quotes in the literal.
+     */
+    @DataProvider(name = "validEnquotedNCharLiteralValues")
+    protected Object[][] validEnquotedNCharLiteralValues() {
+        return new Object[][]{
+            {"Hello", "N'Hello'"},
+            {"G'Day", "N'G''Day'"},
+            {"'G''Day'", "N'''G''''Day'''"},
+            {"I'''M", "N'I''''''M'"},
+            {"N'Hello'", "N'N''Hello'''"},
+            {"The Dark Knight", "N'The Dark Knight'"}
+
+        };
+    }
 }
diff --git a/jdk/test/java/time/tck/java/time/TCKDuration.java b/jdk/test/java/time/tck/java/time/TCKDuration.java
index 1ef1302..40eefd0 100644
--- a/jdk/test/java/time/tck/java/time/TCKDuration.java
+++ b/jdk/test/java/time/tck/java/time/TCKDuration.java
@@ -2893,6 +2893,9 @@
             {-1, 0, "PT-1S"},
             {-1, 1000, "PT-0.999999S"},
             {-1, 900000000, "PT-0.1S"},
+            {-60, 100_000_000, "PT-59.9S"},
+            {-59, -900_000_000, "PT-59.9S"},
+            {-60, -100_000_000, "PT-1M-0.1S"},
             {Long.MAX_VALUE, 0, "PT" + (Long.MAX_VALUE / 3600) + "H" +
                     ((Long.MAX_VALUE % 3600) / 60) + "M" + (Long.MAX_VALUE % 60) + "S"},
             {Long.MIN_VALUE, 0, "PT" + (Long.MIN_VALUE / 3600) + "H" +
diff --git a/jdk/test/java/util/Locale/LocaleProviders.java b/jdk/test/java/util/Locale/LocaleProviders.java
index fe7b708..230d11c 100644
--- a/jdk/test/java/util/Locale/LocaleProviders.java
+++ b/jdk/test/java/util/Locale/LocaleProviders.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -213,7 +213,7 @@
     static void bug8013903Test() {
         if (System.getProperty("os.name").startsWith("Windows")) {
             Date sampleDate = new Date(0x10000000000L);
-            String fallbackResult = "Heisei 16.Nov.03 (Wed) AM 11:53:47";
+            String hostResult = "\u5e73\u6210 16.11.03 (Wed) AM 11:53:47";
             String jreResult = "\u5e73\u6210 16.11.03 (\u6c34) \u5348\u524d 11:53:47";
             Locale l = new Locale("ja", "JP", "JP");
             SimpleDateFormat sdf = new SimpleDateFormat("GGGG yyyy.MMM.dd '('E')' a hh:mm:ss", l);
@@ -227,11 +227,10 @@
                         result + "\", expected: \"" + jreResult);
                 }
             } else {
-                // should be FALLBACK, as Windows HOST does not return
-                // display names
-                if (!fallbackResult.equals(result)) {
+                // Windows display names. Subject to change if Windows changes its format.
+                if (!hostResult.equals(result)) {
                     throw new RuntimeException("Format failed. result: \"" +
-                        result + "\", expected: \"" + fallbackResult);
+                        result + "\", expected: \"" + hostResult);
                 }
             }
         }
diff --git a/jdk/test/java/util/Locale/LocaleProviders.sh b/jdk/test/java/util/Locale/LocaleProviders.sh
index fb8043e..798fce5 100644
--- a/jdk/test/java/util/Locale/LocaleProviders.sh
+++ b/jdk/test/java/util/Locale/LocaleProviders.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 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
@@ -24,7 +24,7 @@
 #
 # @test
 # @bug 6336885 7196799 7197573 7198834 8000245 8000615 8001440 8008577
-#      8010666 8013086 8013233 8013903 8015960 8028771 8062006
+#      8010666 8013086 8013233 8013903 8015960 8028771 8054482 8062006
 # @summary tests for "java.locale.providers" system property
 # @compile -XDignore.symbol.file LocaleProviders.java
 # @run shell/timeout=600 LocaleProviders.sh
diff --git a/jdk/test/java/util/zip/ZipFile/TestZipFile.java b/jdk/test/java/util/zip/ZipFile/TestZipFile.java
index 9868777..515ed35 100644
--- a/jdk/test/java/util/zip/ZipFile/TestZipFile.java
+++ b/jdk/test/java/util/zip/ZipFile/TestZipFile.java
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8142508
+ * @bug 8142508 8146431
  * @summary Tests various ZipFile apis
  * @run main/manual TestZipFile
  */
@@ -216,6 +216,13 @@
     }
 
     static void doTest0(Zip zip, ZipFile zf) throws Throwable {
+        // (0) check zero-length entry name, no AIOOBE
+        try {
+            check(zf.getEntry("") == null);;
+        } catch (Throwable t) {
+            unexpected(t);
+        }
+
         List<ZipEntry> list = new ArrayList(zip.entries.keySet());
         // (1) check entry list, in expected order
         if (!check(Arrays.equals(
diff --git a/jdk/test/javax/management/ImplementationVersion/ImplVersionCommand.java b/jdk/test/javax/management/ImplementationVersion/ImplVersionCommand.java
index 7f142cf..1a24feb 100644
--- a/jdk/test/javax/management/ImplementationVersion/ImplVersionCommand.java
+++ b/jdk/test/javax/management/ImplementationVersion/ImplVersionCommand.java
@@ -53,21 +53,13 @@
 
         // Check JMX implementation version vs. JVM implementation version
         //
-        if (Boolean.valueOf(args[1]).booleanValue()) {
-            if (!mbsdVersion.equals(args[0]))
-                throw new IllegalArgumentException(
-                  "JMX and Java Runtime implementation versions do not match!");
-            // Test OK!
-            //
-            System.out.println("JMX and Java Runtime implementation " +
-                               "versions match!");
-        } else {
-            // Test OK!
-            //
-            System.out.println("JMX and Java Runtime implementation " +
-                               "versions do not match because the test " +
-                               "is using an unbundled version of JMX!");
-        }
+        if (!mbsdVersion.equals(args[0]))
+            throw new IllegalArgumentException(
+              "JMX and Java Runtime implementation versions do not match!");
+        // Test OK!
+        //
+        System.out.println("JMX and Java Runtime implementation " +
+                           "versions match!");
         System.out.println("Bye! Bye!");
     }
 }
diff --git a/jdk/test/javax/management/ImplementationVersion/ImplVersionTest.java b/jdk/test/javax/management/ImplementationVersion/ImplVersionTest.java
index b17fd64..ae454b5 100644
--- a/jdk/test/javax/management/ImplementationVersion/ImplVersionTest.java
+++ b/jdk/test/javax/management/ImplementationVersion/ImplVersionTest.java
@@ -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
@@ -25,9 +25,9 @@
  * @test
  * @bug 4842196
  * @summary Test that there is no difference between the JMX version and the
- * JDK version when JMX is bundled into the Java platform and the application
- * is run with a security manager and the test codebase has the java permission
- * to read the "java.runtime.version" system property.
+ * JDK version when the application is run with a security manager and the
+ * test codebase has the java permission to read the "java.runtime.version"
+ * system property.
  * @author Luis-Miguel Alventosa
  * @modules java.management
  * @run clean ImplVersionTest ImplVersionCommand
@@ -36,8 +36,6 @@
  */
 
 import java.io.File;
-import java.security.CodeSource;
-import javax.management.MBeanServer;
 
 public class ImplVersionTest {
 
@@ -70,18 +68,13 @@
             System.out.println("testClasses = " + testClasses);
             // Get boot class path
             //
-            boolean checkVersion = true;
-            String bootClassPath = System.getProperty("sun.boot.class.path");
-            if (bootClassPath != null &&
-                bootClassPath.indexOf("jmxri.jar") != -1)
-                checkVersion = false;
             String command =
                 javaHome + File.separator + "bin" + File.separator + "java " +
                 " -classpath " + testClasses +
                 " -Djava.security.manager -Djava.security.policy==" + testSrc +
                 File.separator + "policy -Dtest.classes=" + testClasses +
                 " ImplVersionCommand " +
-                System.getProperty("java.runtime.version") + " " + checkVersion;
+                System.getProperty("java.runtime.version");
             System.out.println("ImplVersionCommand Exec Command = " +command);
             Process proc = Runtime.getRuntime().exec(command);
             new ImplVersionReader(proc, proc.getInputStream()).start();
diff --git a/jdk/test/javax/management/remote/mandatory/version/ImplVersionTest.java b/jdk/test/javax/management/remote/mandatory/version/ImplVersionTest.java
index 0a92403..1e3662c 100644
--- a/jdk/test/javax/management/remote/mandatory/version/ImplVersionTest.java
+++ b/jdk/test/javax/management/remote/mandatory/version/ImplVersionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 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,9 +25,9 @@
  * @test
  * @bug 5046815
  * @summary Test that RMIServer.getVersion() reflects the JDK version when
- * JMX is bundled into the Java platform and the application is run with a
- * security manager and the test codebase has the java permission to read
- * the "java.runtime.version" system property.
+ * the Java platform and the application is run with a security manager and the
+ * test codebase has the java permission to read the "java.runtime.version"
+ * system property.
  * @author Luis-Miguel Alventosa, Joel Feraud
  * @modules java.management
  * @run clean ImplVersionTest ImplVersionCommand
@@ -36,8 +36,6 @@
  */
 
 import java.io.File;
-import java.security.CodeSource;
-import javax.management.MBeanServer;
 
 public class ImplVersionTest {
 
diff --git a/jdk/test/sun/misc/VM/GetNanoTimeAdjustment.java b/jdk/test/jdk/internal/misc/VM/GetNanoTimeAdjustment.java
similarity index 99%
rename from jdk/test/sun/misc/VM/GetNanoTimeAdjustment.java
rename to jdk/test/jdk/internal/misc/VM/GetNanoTimeAdjustment.java
index d92cba9..9643525 100644
--- a/jdk/test/sun/misc/VM/GetNanoTimeAdjustment.java
+++ b/jdk/test/jdk/internal/misc/VM/GetNanoTimeAdjustment.java
@@ -21,13 +21,13 @@
  * questions.
  */
 import java.util.Objects;
-import sun.misc.VM;
+import jdk.internal.misc.VM;
 
 /**
  * @test
  * @bug 8068730
  * @summary tests that VM.getgetNanoTimeAdjustment() works as expected.
- * @modules java.base/sun.misc
+ * @modules java.base/jdk.internal.misc
  * @run main GetNanoTimeAdjustment
  * @author danielfuchs
  */
diff --git a/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java b/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java
index 5275b69..887ae76 100644
--- a/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java
+++ b/jdk/test/sun/security/krb5/auto/ReplayCacheTestProc.java
@@ -78,7 +78,7 @@
                 mode = -1;
             }
 
-            uid = sun.misc.VM.geteuid();
+            uid = jdk.internal.misc.VM.geteuid();
 
             KDC kdc = KDC.create(OneKDC.REALM, HOST, 0, true);
             for (int i=0; i<nu; i++) {
diff --git a/jdk/test/sun/security/krb5/auto/TEST.properties b/jdk/test/sun/security/krb5/auto/TEST.properties
index 6814507..bdf8065 100644
--- a/jdk/test/sun/security/krb5/auto/TEST.properties
+++ b/jdk/test/sun/security/krb5/auto/TEST.properties
@@ -1,4 +1,5 @@
-modules java.base/sun.misc \
+modules java.base/jdk.internal.misc \
+        java.base/sun.misc \
         java.base/sun.net.spi.nameservice \
         java.base/sun.security.util \
         java.security.jgss/sun.security.jgss \
diff --git a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java
index 6911dbe..655edd3 100644
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java
@@ -107,7 +107,7 @@
         data = new byte[2048];
         // keypair generation is very slow, test only a few short keys
         int[] keyLengths = {512, 512, 1024};
-        BigInteger[] pubExps = {null, BigInteger.valueOf(3), null};
+        BigInteger[] pubExps = {null, RSAKeyGenParameterSpec.F4, null};
         KeyPair[] keyPairs = new KeyPair[3];
         RandomFactory.getRandom().nextBytes(data);
         KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", provider);
diff --git a/jdk/test/tools/pack200/Pack200Test.java b/jdk/test/tools/pack200/Pack200Test.java
index 3b1e5ca..9298e97 100644
--- a/jdk/test/tools/pack200/Pack200Test.java
+++ b/jdk/test/tools/pack200/Pack200Test.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, 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
@@ -31,6 +31,7 @@
  /*
   * @test
   * @bug 6521334 6712743 8007902
+  * @key intermittent
   * @summary check for memory leaks, test general packer/unpacker functionality\
   *          using native and java unpackers
   * @compile -XDignore.symbol.file Utils.java Pack200Test.java
diff --git a/langtools/.hgtags b/langtools/.hgtags
index 1f356ab..0d8509b 100644
--- a/langtools/.hgtags
+++ b/langtools/.hgtags
@@ -342,3 +342,4 @@
 ae8cdc734bab4f19ef8babd2434dcf024672ad38 jdk-9+97
 345520da2ec17100cb512a53d541a307a195305e jdk-9+98
 cb73b474703e2de266542b505cffd658bcc052da jdk-9+99
+51136404ee5e6cd5868b60d66ebd55a02170b508 jdk-9+100
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java b/langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
index bac95f4..c236a1f 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java
@@ -145,7 +145,7 @@
      * The version recognized by the Java Platform, Standard Edition
      * 9.
      *
-     * @since 1.9
+     * @since 9
      */
      RELEASE_9;
 
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java
index 092a714..46b2875 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitor9.java
@@ -57,7 +57,7 @@
  * @see AbstractAnnotationValueVisitor6
  * @see AbstractAnnotationValueVisitor7
  * @see AbstractAnnotationValueVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public abstract class AbstractAnnotationValueVisitor9<R, P> extends AbstractAnnotationValueVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java
index 1d37826..c239303 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitor9.java
@@ -61,7 +61,7 @@
  * @see AbstractElementVisitor6
  * @see AbstractElementVisitor7
  * @see AbstractElementVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public abstract class AbstractElementVisitor9<R, P> extends AbstractElementVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java
index 051100c..d268e86 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitor9.java
@@ -61,7 +61,7 @@
  * @see AbstractTypeVisitor6
  * @see AbstractTypeVisitor7
  * @see AbstractTypeVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public abstract class AbstractTypeVisitor9<R, P> extends AbstractTypeVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java
index bd56111..a0e51e2 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitor9.java
@@ -74,7 +74,7 @@
  * @see ElementKindVisitor6
  * @see ElementKindVisitor7
  * @see ElementKindVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public class ElementKindVisitor9<R, P> extends ElementKindVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java
index 32c368d..b6f8810 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/ElementScanner9.java
@@ -87,7 +87,7 @@
  * @see ElementScanner6
  * @see ElementScanner7
  * @see ElementScanner8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public class ElementScanner9<R, P> extends ElementScanner8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java
index e48903d..d5cf8e0 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitor9.java
@@ -64,7 +64,7 @@
  * @see SimpleAnnotationValueVisitor6
  * @see SimpleAnnotationValueVisitor7
  * @see SimpleAnnotationValueVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public class SimpleAnnotationValueVisitor9<R, P> extends SimpleAnnotationValueVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java
index d7fc7b4..fae29ca 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitor9.java
@@ -69,7 +69,7 @@
  * @see SimpleElementVisitor6
  * @see SimpleElementVisitor7
  * @see SimpleElementVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public class SimpleElementVisitor9<R, P> extends SimpleElementVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java b/langtools/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
index f92e9d7..299969b 100644
--- a/langtools/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
+++ b/langtools/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitor9.java
@@ -72,7 +72,7 @@
  * @see TypeKindVisitor6
  * @see TypeKindVisitor7
  * @see TypeKindVisitor8
- * @since 1.9
+ * @since 9
  */
 @SupportedSourceVersion(RELEASE_9)
 public class TypeKindVisitor9<R, P> extends TypeKindVisitor8<R, P> {
diff --git a/langtools/src/java.compiler/share/classes/javax/tools/FileManagerUtils.java b/langtools/src/java.compiler/share/classes/javax/tools/FileManagerUtils.java
index fe8f658..1fe7783 100644
--- a/langtools/src/java.compiler/share/classes/javax/tools/FileManagerUtils.java
+++ b/langtools/src/java.compiler/share/classes/javax/tools/FileManagerUtils.java
@@ -32,7 +32,7 @@
 /**
  * Package-private utility methods to convert between files and paths.
  *
- * @since 1.9
+ * @since 9
  */
 class FileManagerUtils {
     private FileManagerUtils() { }
diff --git a/langtools/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java b/langtools/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java
index 9701584..e24d5a2 100644
--- a/langtools/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java
+++ b/langtools/src/java.compiler/share/classes/javax/tools/StandardJavaFileManager.java
@@ -187,7 +187,7 @@
      * a directory or if this file manager does not support any of the
      * given paths.
      *
-     * @since 1.9
+     * @since 9
      */
     default Iterable<? extends JavaFileObject> getJavaFileObjectsFromPaths(
             Iterable<? extends Path> paths) {
@@ -226,7 +226,7 @@
      * @throws NullPointerException if the given array contains null
      * elements
      *
-     * @since 1.9
+     * @since 9
      */
     default Iterable<? extends JavaFileObject> getJavaFileObjects(Path... paths) {
         return getJavaFileObjectsFromPaths(Arrays.asList(paths));
@@ -295,7 +295,7 @@
      * @throws IOException if {@code location} is an output location and
      * {@code paths} does not represent an existing directory
      *
-     * @since 1.9
+     * @since 9
      */
     default void setLocationFromPaths(Location location, Iterable<? extends Path> paths)
         throws IOException {
@@ -324,7 +324,7 @@
      * associated search path
      *
      * @see #setLocationFromPaths
-     * @since 1.9
+     * @since 9
      */
     default Iterable<? extends Path> getLocationAsPaths(Location location) {
         return asPaths(getLocation(location));
@@ -345,7 +345,7 @@
      * @throws IllegalArgumentException if the file object does not have an underlying path
      * @throws UnsupportedOperationException if the operation is not supported by this file manager
      *
-     * @since 1.9
+     * @since 9
      */
     default Path asPath(FileObject file) {
         throw new UnsupportedOperationException();
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AttributeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AttributeTree.java
index 86d236f..d6c30f9 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AttributeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AttributeTree.java
@@ -33,12 +33,10 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface AttributeTree extends DocTree {
     /**
      * The kind of an attribute value.
      */
-    @jdk.Exported
     enum ValueKind {
         /** The attribute value is empty. */
         EMPTY,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AuthorTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AuthorTree.java
index 4dce58f..d1b1d19 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AuthorTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/AuthorTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface AuthorTree extends BlockTagTree {
     /**
      * Returns the name of the author.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/BlockTagTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/BlockTagTree.java
index 2284f01..bb5bbe4 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/BlockTagTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/BlockTagTree.java
@@ -31,7 +31,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface BlockTagTree extends DocTree {
     /**
      * Returns the name of the tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/CommentTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/CommentTree.java
index 346b154..52c5089 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/CommentTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/CommentTree.java
@@ -33,7 +33,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface CommentTree extends DocTree {
     /**
      * Returns the text of the comment.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DeprecatedTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DeprecatedTree.java
index bfcebcf..7855c89 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DeprecatedTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DeprecatedTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DeprecatedTree extends BlockTagTree {
     /**
      * Returns the description explaining why an item is deprecated.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocCommentTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocCommentTree.java
index b85edc9..810be9e 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocCommentTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocCommentTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DocCommentTree extends DocTree {
     /**
      * Returns the first sentence of a documentation comment.
@@ -49,7 +48,7 @@
      * before any block tags, including the first sentence.
      * @return body of a documentation comment first sentence inclusive
      *
-     * @since 1.9
+     * @since 9
      */
     default List<? extends DocTree> getFullBody() {
         ArrayList<DocTree> bodyList = new ArrayList<>();
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocRootTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocRootTree.java
index e0c3c91..2de83b3 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocRootTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocRootTree.java
@@ -33,5 +33,4 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DocRootTree extends InlineTagTree { }
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTree.java
index 0b54ca8..2a526eb 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTree.java
@@ -30,12 +30,10 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DocTree {
     /**
      * Enumerates all kinds of trees.
      */
-    @jdk.Exported
     enum Kind {
         /**
          * Used for instances of {@link AttributeTree}
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTreeVisitor.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTreeVisitor.java
index 1512cf0..f9a3d9e 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTreeVisitor.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/DocTreeVisitor.java
@@ -54,7 +54,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DocTreeVisitor<R,P> {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EndElementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EndElementTree.java
index e54e308..5015b02 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EndElementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EndElementTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface EndElementTree extends DocTree {
     /**
      * Returns the name of this element.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EntityTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EntityTree.java
index 5431fd7..5720023 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EntityTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/EntityTree.java
@@ -38,7 +38,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface EntityTree extends DocTree {
     /**
      * Returns the name or value of the entity.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ErroneousTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ErroneousTree.java
index eb0156f..4e867e2a 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ErroneousTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ErroneousTree.java
@@ -33,7 +33,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ErroneousTree extends TextTree {
     /**
      * Returns a diagnostic object giving details about
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IdentifierTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IdentifierTree.java
index a82bf142..a4e54b6 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IdentifierTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IdentifierTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface IdentifierTree extends DocTree {
     /**
      * Returns the name of the identifier.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IndexTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IndexTree.java
index bfceffa..d6b5d7d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IndexTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/IndexTree.java
@@ -33,9 +33,8 @@
  * <p>
  * {&#064;index keyword optional description} <br>
  *
- * @since 1.9
+ * @since 9
  */
-@jdk.Exported
 public interface IndexTree extends InlineTagTree {
     /**
      * Returns the specified search term.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InheritDocTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InheritDocTree.java
index 444558a..54347d6 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InheritDocTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InheritDocTree.java
@@ -34,5 +34,4 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface InheritDocTree extends InlineTagTree { }
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InlineTagTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InlineTagTree.java
index 6cbf1fc..8a3222f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InlineTagTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/InlineTagTree.java
@@ -31,7 +31,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface InlineTagTree extends DocTree {
     /**
      * Returns the name of the tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LinkTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LinkTree.java
index 1f4a0a1..7db7907 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LinkTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LinkTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface LinkTree extends InlineTagTree {
     /**
      * Returns the reference of a link.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LiteralTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LiteralTree.java
index 91727cc..babd857 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LiteralTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/LiteralTree.java
@@ -34,7 +34,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface LiteralTree extends InlineTagTree {
     /**
      * Returns the body of the {@code @code} or {@code @literal} tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ParamTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ParamTree.java
index b721783..cc800ca 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ParamTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ParamTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ParamTree extends BlockTagTree {
     /**
      * Returns true if this is documenting a type parameter.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReferenceTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReferenceTree.java
index ab62303..9d4c0c0 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReferenceTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReferenceTree.java
@@ -34,7 +34,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ReferenceTree extends DocTree {
     /**
      * Returns the signature of the Java language element being referenced,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReturnTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReturnTree.java
index 305c92c..5d23903 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReturnTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ReturnTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ReturnTree extends BlockTagTree {
     /**
      * Returns the description of the return value of a method.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SeeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SeeTree.java
index 4ff81c0..ecab84d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SeeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SeeTree.java
@@ -38,7 +38,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface SeeTree extends BlockTagTree {
     /**
      * Returns the reference.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialDataTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialDataTree.java
index 9075759..2c7ff08 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialDataTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialDataTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface SerialDataTree extends BlockTagTree {
     /**
      * Returns the description of the serial data.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialFieldTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialFieldTree.java
index ff7c25a..5e0e648 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialFieldTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialFieldTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface SerialFieldTree extends BlockTagTree {
     /**
      * Returns the name of the serial field.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialTree.java
index 04feab7..980360d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SerialTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface SerialTree extends BlockTagTree {
     /**
      * Returns the description of the field, or the word
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SinceTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SinceTree.java
index 074aebd..68406a8 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SinceTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/SinceTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface SinceTree extends BlockTagTree {
     /**
      * Returns the text explaining the availability of the item being documented.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/StartElementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/StartElementTree.java
index 34f98e8..5731f1a 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/StartElementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/StartElementTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface StartElementTree extends DocTree {
     /**
      * Returns the name of the element.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/TextTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/TextTree.java
index f2adf02..86f81e8 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/TextTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/TextTree.java
@@ -30,7 +30,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface TextTree extends DocTree {
     /**
      * Returns the text.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ThrowsTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ThrowsTree.java
index 1f34046..0fcb086 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ThrowsTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ThrowsTree.java
@@ -38,7 +38,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ThrowsTree extends BlockTagTree {
     /**
      * Returns a name of the exception being documented.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java
index 80d9357..d55a36b 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java
@@ -36,7 +36,6 @@
  * @since 1.8
  *
  */
-@jdk.Exported
 public interface UnknownBlockTagTree extends BlockTagTree {
     /**
      * Returns the content of an unrecognized block tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java
index b8cd4bd..2eedb18 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java
@@ -36,7 +36,6 @@
  * @since 1.8
  *
  */
-@jdk.Exported
 public interface UnknownInlineTagTree extends InlineTagTree {
     /**
      * Returns the content of an unrecognized inline tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ValueTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ValueTree.java
index 5c792b5..be6be16 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ValueTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/ValueTree.java
@@ -33,7 +33,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface ValueTree extends InlineTagTree {
     /**
      * Returns the reference to the value.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/VersionTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/VersionTree.java
index eee4237..41cc20e 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/VersionTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/VersionTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface VersionTree extends BlockTagTree {
     /**
      * Returns the body of the tag.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/package-info.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/package-info.java
index 47de937..324da40 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/package-info.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/doctree/package-info.java
@@ -31,5 +31,4 @@
  * @since 1.8
  * @see <a href="http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javadoc.html#javadoctags">http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javadoc.html#javadoctags</a>
  */
-@jdk.Exported
 package com.sun.source.doctree;
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotatedTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotatedTypeTree.java
index d84fcd6..26d7473 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotatedTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotatedTypeTree.java
@@ -41,7 +41,6 @@
  * @author Mahmood Ali
  * @since 1.8
  */
-@jdk.Exported
 public interface AnnotatedTypeTree extends ExpressionTree {
     /**
      * Returns the annotations associated with this type expression.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotationTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotationTree.java
index b47cdbc..06c5a7d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotationTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AnnotationTree.java
@@ -42,7 +42,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface AnnotationTree extends ExpressionTree {
     /**
      * Returns the annotation type.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayAccessTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayAccessTree.java
index 515aee0..7ec7004 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayAccessTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayAccessTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ArrayAccessTree extends ExpressionTree {
     /**
      * Returns the expression for the array being accessed.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayTypeTree.java
index d7d8ceb..504b3af 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ArrayTypeTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ArrayTypeTree extends Tree {
     /**
      * Returns the element type of this array type.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssertTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssertTree.java
index 080bc3e..ee1cc7b 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssertTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssertTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface AssertTree extends StatementTree {
     /**
      * Returns the condition being asserted.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssignmentTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssignmentTree.java
index 5ce69d2..cb94ead 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssignmentTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/AssignmentTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface AssignmentTree extends ExpressionTree {
     /**
      * Returns the variable being assigned to.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BinaryTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BinaryTree.java
index 8f0d155..7769b71 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BinaryTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BinaryTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface BinaryTree extends ExpressionTree {
     /**
      * Returns the left (first) operand of the expression.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BlockTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BlockTree.java
index 4b5721e..b5ce0b7 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BlockTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BlockTree.java
@@ -45,7 +45,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface BlockTree extends StatementTree {
     /**
      * Returns true if and only if this is a static initializer block.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BreakTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BreakTree.java
index 4f900a6..9307d69 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BreakTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/BreakTree.java
@@ -43,7 +43,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface BreakTree extends StatementTree {
     /**
      * Returns the label for this {@code break} statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CaseTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CaseTree.java
index 6aa374f..a70fe7e 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CaseTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CaseTree.java
@@ -45,7 +45,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface CaseTree extends Tree {
     /**
      * Returns the expression for the case, or
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CatchTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CatchTree.java
index b91a94d..40ab239 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CatchTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CatchTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface CatchTree extends Tree {
     /**
      * Returns the catch variable.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ClassTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ClassTree.java
index 3a7f5b3..b58ccad 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ClassTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ClassTree.java
@@ -48,7 +48,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ClassTree extends StatementTree {
     /**
      * Returns the modifiers, including any annotations,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompilationUnitTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompilationUnitTree.java
index fa3e574..7aab122 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompilationUnitTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompilationUnitTree.java
@@ -37,7 +37,6 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Exported
 public interface CompilationUnitTree extends Tree {
     /**
      * Returns the annotations listed on any package declaration
@@ -59,7 +58,7 @@
      * Returns the package tree associated with this compilation unit,
      * or {@code null} if there is no package declaration.
      * @return the package tree
-     * @since 1.9
+     * @since 9
      */
     PackageTree getPackage();
 
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompoundAssignmentTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompoundAssignmentTree.java
index e4db62b..db6dcc8 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompoundAssignmentTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/CompoundAssignmentTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface CompoundAssignmentTree extends ExpressionTree {
     /**
      * Returns the variable on the left hand side of the compound assignment.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ConditionalExpressionTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ConditionalExpressionTree.java
index fa3dd83..aaf665b 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ConditionalExpressionTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ConditionalExpressionTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ConditionalExpressionTree extends ExpressionTree {
     /**
      * Returns the condition.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ContinueTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ContinueTree.java
index 2f6f3fa..0d9a4ab 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ContinueTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ContinueTree.java
@@ -42,7 +42,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ContinueTree extends StatementTree {
     /**
      * Returns the label for this {@code continue} statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/DoWhileLoopTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/DoWhileLoopTree.java
index 2aeac4b..6a89d2d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/DoWhileLoopTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/DoWhileLoopTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface DoWhileLoopTree extends StatementTree {
     /**
      * Returns the condition of the loop.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EmptyStatementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EmptyStatementTree.java
index 6548eaf..4e33f96 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EmptyStatementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EmptyStatementTree.java
@@ -39,5 +39,4 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface EmptyStatementTree extends StatementTree {}
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EnhancedForLoopTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EnhancedForLoopTree.java
index f9619f8..7316c43 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EnhancedForLoopTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/EnhancedForLoopTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface EnhancedForLoopTree extends StatementTree {
     /**
      * Returns the control variable for the loop.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ErroneousTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ErroneousTree.java
index b56c3ee..aa1dbca 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ErroneousTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ErroneousTree.java
@@ -34,7 +34,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ErroneousTree extends ExpressionTree {
     /**
      * Returns any trees that were saved in this node.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionStatementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionStatementTree.java
index 7ae8c22..d2c852f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionStatementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionStatementTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ExpressionStatementTree extends StatementTree {
     /**
      * Returns the expression constituting this statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionTree.java
index f3a7ed3..ca1bc2d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ExpressionTree.java
@@ -35,5 +35,4 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ExpressionTree extends Tree {}
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ForLoopTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ForLoopTree.java
index e42daff..b155b5f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ForLoopTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ForLoopTree.java
@@ -42,7 +42,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ForLoopTree extends StatementTree {
     /**
      * Returns any initializers of the {@code for} statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IdentifierTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IdentifierTree.java
index 3f2a2f4..bb37699 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IdentifierTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IdentifierTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface IdentifierTree extends ExpressionTree {
     /**
      * Returns the name of the identifier.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IfTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IfTree.java
index f5790c7..6358e3a 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IfTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IfTree.java
@@ -45,7 +45,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface IfTree extends StatementTree {
     /**
      * Returns the condition of the if-statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ImportTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ImportTree.java
index dfd57e5..0b0c192 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ImportTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ImportTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ImportTree extends Tree {
     /**
      * Returns true if this is a static import declaration.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/InstanceOfTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/InstanceOfTree.java
index 7766482..1bd27b6 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/InstanceOfTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/InstanceOfTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface InstanceOfTree extends ExpressionTree {
     /**
      * Returns the expression to be tested.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IntersectionTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IntersectionTypeTree.java
index 0b2790a..c7b77a0 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IntersectionTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/IntersectionTypeTree.java
@@ -34,7 +34,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface IntersectionTypeTree extends Tree {
     /**
      * Returns the bounds of the type.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LabeledStatementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LabeledStatementTree.java
index 3fe724e..966cf02 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LabeledStatementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LabeledStatementTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface LabeledStatementTree extends StatementTree {
     /**
      * Returns the label.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LambdaExpressionTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LambdaExpressionTree.java
index 9f3c988..4efa546 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LambdaExpressionTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LambdaExpressionTree.java
@@ -37,7 +37,6 @@
  *   (x,y)-> { return x + y; }
  * }</pre>
  */
-@jdk.Exported
 public interface LambdaExpressionTree extends ExpressionTree {
 
     /**
@@ -47,7 +46,6 @@
      * <li> statement lambdas, whose body is a block
      * </ul>
      */
-    @jdk.Exported
     public enum BodyKind {
         /** enum constant for expression lambdas */
         EXPRESSION,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LineMap.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LineMap.java
index 7a396d1..711f63a 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LineMap.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LineMap.java
@@ -31,7 +31,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public interface LineMap {
     /**
      * Finds the start position of a line.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LiteralTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LiteralTree.java
index 4c8fa52..c4cb9ca 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LiteralTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/LiteralTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface LiteralTree extends ExpressionTree {
     /**
      * Returns the value of the literal expression.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberReferenceTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberReferenceTree.java
index 23c77bf..d9c4885 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberReferenceTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberReferenceTree.java
@@ -39,14 +39,12 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface MemberReferenceTree extends ExpressionTree {
 
     /**
      * There are two kinds of member references: (i) method references and
      * (ii) constructor references
      */
-    @jdk.Exported
     public enum ReferenceMode {
         /** enum constant for method references. */
         INVOKE,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberSelectTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberSelectTree.java
index dac7472..1834e88 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberSelectTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MemberSelectTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface MemberSelectTree extends ExpressionTree {
     /**
      * Returns the expression for which a member is to be selected.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodInvocationTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodInvocationTree.java
index 3e7088b..3d04ddd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodInvocationTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodInvocationTree.java
@@ -43,7 +43,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface MethodInvocationTree extends ExpressionTree {
     /**
      * Returns the type arguments for this method invocation.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodTree.java
index f16c521..83756d1 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/MethodTree.java
@@ -46,7 +46,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface MethodTree extends Tree {
     /**
      * Returns the modifiers, including any annotations for the method being declared.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ModifiersTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ModifiersTree.java
index 1dd45fb..6aebf0d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ModifiersTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ModifiersTree.java
@@ -45,7 +45,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ModifiersTree extends Tree {
     /**
      * Returns the flags in this modifiers tree.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewArrayTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewArrayTree.java
index beea5bb..0b52c88 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewArrayTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewArrayTree.java
@@ -43,7 +43,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface NewArrayTree extends ExpressionTree {
     /**
      * Returns the base type of the expression.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewClassTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewClassTree.java
index b82faaf..34f3013 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewClassTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/NewClassTree.java
@@ -48,7 +48,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface NewClassTree extends ExpressionTree {
     /**
      * Returns the enclosing expression, or {@code null} if none.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PackageTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PackageTree.java
index 8d722f6..1ab65a6 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PackageTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PackageTree.java
@@ -33,9 +33,8 @@
  * @jls sections 7.3, and 7.4
  *
  * @author Paul Govereau
- * @since 1.9
+ * @since 9
  */
-@jdk.Exported
 public interface PackageTree extends Tree {
     /**
      * Returns the annotations associated with this package declaration.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParameterizedTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParameterizedTypeTree.java
index 99f5b75..93f3091 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParameterizedTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParameterizedTypeTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ParameterizedTypeTree extends Tree {
     /**
      * Returns the base type.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParenthesizedTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParenthesizedTree.java
index 02eb7b3..ab4d9bd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParenthesizedTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ParenthesizedTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ParenthesizedTree extends ExpressionTree {
     /**
      * Returns the expression within the parentheses.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PrimitiveTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PrimitiveTypeTree.java
index 4d509a7..72d4eba 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PrimitiveTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/PrimitiveTypeTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface PrimitiveTypeTree extends Tree {
     /**
      * Returns the kind of this primitive type.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ReturnTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ReturnTree.java
index 6f58574..cabc303 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ReturnTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ReturnTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ReturnTree extends StatementTree {
     /**
      * Returns the expression to be returned.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Scope.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Scope.java
index e30d927..d0ea08b 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Scope.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Scope.java
@@ -48,7 +48,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public interface Scope {
     /**
      * Returns the enclosing scope.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/StatementTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/StatementTree.java
index c558ea2..442dcee 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/StatementTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/StatementTree.java
@@ -35,5 +35,4 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface StatementTree extends Tree {}
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SwitchTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SwitchTree.java
index 76e9088..9e40968 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SwitchTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SwitchTree.java
@@ -43,7 +43,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface SwitchTree extends StatementTree {
     /**
      * Returns the expression for the {@code switch} statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SynchronizedTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SynchronizedTree.java
index cb72cf7..51edafd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SynchronizedTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/SynchronizedTree.java
@@ -40,7 +40,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface SynchronizedTree extends StatementTree {
     /**
      * Returns the expression on which to synchronize.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ThrowTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ThrowTree.java
index af319f3..d23e896 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ThrowTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/ThrowTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface ThrowTree extends StatementTree {
     /**
      * Returns the expression to be thrown.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Tree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Tree.java
index 8c6b088..bdd0f53 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Tree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/Tree.java
@@ -39,13 +39,11 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public interface Tree {
 
     /**
      * Enumerates all kinds of trees.
      */
-    @jdk.Exported
     public enum Kind {
         /**
          * Used for instances of {@link AnnotatedTypeTree}
@@ -212,7 +210,7 @@
 
         /**
          * Used for instances of {@link PackageTree}.
-         * @since 1.9
+         * @since 9
          */
         PACKAGE(PackageTree.class),
 
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TreeVisitor.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TreeVisitor.java
index 8f63188..30d2a32 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TreeVisitor.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TreeVisitor.java
@@ -56,7 +56,6 @@
  *
  * @since 1.6
  */
-@jdk.Exported
 public interface TreeVisitor<R,P> {
     /**
      * Visits an AnnotatedTypeTree node.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TryTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TryTree.java
index a02e2e5..7643598 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TryTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TryTree.java
@@ -45,7 +45,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface TryTree extends StatementTree {
     /**
      * Returns the block of the {@code try} statement.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeCastTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeCastTree.java
index 23d14e8..ac86ecd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeCastTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeCastTree.java
@@ -39,7 +39,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface TypeCastTree extends ExpressionTree {
     /**
      * Returns the target type of the cast.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeParameterTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeParameterTree.java
index 5ffd552..a911002 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeParameterTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/TypeParameterTree.java
@@ -46,7 +46,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface TypeParameterTree extends Tree {
     /**
      * Returns the name of the type parameter.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnaryTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnaryTree.java
index c9ad921..5ba18fd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnaryTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnaryTree.java
@@ -42,7 +42,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface UnaryTree extends ExpressionTree {
     /**
      * Returns the expression that is the operand of the unary operator.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnionTypeTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnionTypeTree.java
index 5443668..07f488f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnionTypeTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/UnionTypeTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.7
  */
-@jdk.Exported
 public interface UnionTypeTree extends Tree {
     /**
      * Returns the alternative type expressions.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/VariableTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/VariableTree.java
index 203178b..9342ccd 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/VariableTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/VariableTree.java
@@ -42,7 +42,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface VariableTree extends StatementTree {
     /**
      * Returns the modifiers, including any annotations, on the declaration.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WhileLoopTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WhileLoopTree.java
index e59a8d2..58597ed 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WhileLoopTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WhileLoopTree.java
@@ -41,7 +41,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface WhileLoopTree extends StatementTree {
     /**
      * Returns the condition of the loop.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WildcardTree.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WildcardTree.java
index 3fad97b..f5095c1 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WildcardTree.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/WildcardTree.java
@@ -44,7 +44,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface WildcardTree extends Tree {
     /**
      * Returns the bound of the wildcard.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/package-info.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/package-info.java
index 22d1c9b..9819a36 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/package-info.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/tree/package-info.java
@@ -31,5 +31,4 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 package com.sun.source.tree;
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocSourcePositions.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocSourcePositions.java
index a6d5c8d..8298fac 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocSourcePositions.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocSourcePositions.java
@@ -36,7 +36,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface DocSourcePositions extends SourcePositions {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePath.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePath.java
index 1ab74eb..50e9bc8 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePath.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePath.java
@@ -37,7 +37,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public class DocTreePath implements Iterable<DocTree> {
     /**
      * Returns a documentation tree path for a tree node within a compilation unit,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java
index e12aea6..6e11ca1 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java
@@ -37,7 +37,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public class DocTreePathScanner<R, P> extends DocTreeScanner<R, P> {
     /**
      * Scans a tree from a position identified by a tree path.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java
index 4866ab6..9898256 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java
@@ -68,7 +68,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public class DocTreeScanner<R,P> implements DocTreeVisitor<R,P> {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java
index 94537ce..dddbc6c 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java
@@ -43,7 +43,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public abstract class DocTrees extends Trees {
     /**
      * Returns a DocTrees object for a given CompilationTask.
@@ -73,7 +72,7 @@
      * Returns {@code null} if none has been specified.
      * @return the break iterator
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract BreakIterator getBreakIterator();
 
@@ -91,7 +90,7 @@
      * @param e an element whose documentation is required
      * @return the doc comment tree
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract DocCommentTree getDocCommentTree(Element e);
 
@@ -105,7 +104,7 @@
      * @param fileObject the content container
      * @return the doc comment tree
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract DocCommentTree getDocCommentTree(FileObject fileObject);
 
@@ -122,7 +121,7 @@
      * @return the doc comment tree
      * @throws java.io.IOException if an exception occurs
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract DocCommentTree getDocCommentTree(Element e, String relativePath) throws IOException;
 
@@ -141,7 +140,7 @@
      * @param list the DocTree list to interrogate
      * @return the first sentence
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract List<DocTree> getFirstSentence(List<? extends DocTree> list);
 
@@ -173,7 +172,7 @@
      * @param breakiterator a break iterator or {@code null} to specify the default
      *                      sentence breaker
      *
-     * @since 1.9
+     * @since 9
      */
     public abstract void setBreakIterator(BreakIterator breakiterator);
 }
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java
index 622c294..8f1c998 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java
@@ -48,7 +48,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public abstract class JavacTask implements CompilationTask {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Plugin.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Plugin.java
index d31508a..68c14f7 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Plugin.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Plugin.java
@@ -49,7 +49,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public interface Plugin {
     /**
      * Returns the user-friendly name of this plug-in.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java
index 28a946a..4f28955 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java
@@ -38,7 +38,6 @@
  *
  * @since 1.8
  */
-@jdk.Exported
 public class SimpleDocTreeVisitor<R,P> implements DocTreeVisitor<R, P> {
     /**
      * The default value, returned by the {@link #defaultAction default action}.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleTreeVisitor.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleTreeVisitor.java
index 28bd802..a7e5740 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleTreeVisitor.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SimpleTreeVisitor.java
@@ -39,7 +39,6 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Exported
 public class SimpleTreeVisitor <R,P> implements TreeVisitor<R,P> {
     /**
      * The default value, returned by the {@link #defaultAction default action}.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SourcePositions.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SourcePositions.java
index 7a2054b..4f5bbbc 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SourcePositions.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/SourcePositions.java
@@ -35,7 +35,6 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Exported
 public interface SourcePositions {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskEvent.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskEvent.java
index 9ead33e..6a116ab 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskEvent.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskEvent.java
@@ -36,14 +36,12 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public final class TaskEvent
 {
     /**
      * Kind of task event.
      * @since 1.6
      */
-    @jdk.Exported
     public enum Kind {
         /**
          * For events related to the parsing of a file.
@@ -74,7 +72,7 @@
          * This event is not sent when using {@link JavacTask#parse()},
          * {@link JavacTask#analyze()} or {@link JavacTask#generate()}.
          *
-         * @since 1.9
+         * @since 9
          */
         COMPILATION,
     }
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskListener.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskListener.java
index 9a57b13..eef9389 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskListener.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TaskListener.java
@@ -32,7 +32,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public interface TaskListener
 {
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePath.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePath.java
index 4c7e395..3040d1f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePath.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePath.java
@@ -37,7 +37,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public class TreePath implements Iterable<Tree> {
     /**
      * Returns a tree path for a tree node within a compilation unit,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java
index a07f829..46a3e1e 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java
@@ -38,7 +38,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public class TreePathScanner<R, P> extends TreeScanner<R, P> {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java
index 275d9c8..3e37f6f 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java
@@ -74,7 +74,6 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 public class TreeScanner<R,P> implements TreeVisitor<R,P> {
 
     /**
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java
index 5e464c7..3f72336 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java
@@ -51,7 +51,6 @@
  *
  * @author Peter von der Ah&eacute;
  */
-@jdk.Exported
 public abstract class Trees {
     /**
      * Returns a Trees object for a given CompilationTask.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/package-info.java b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/package-info.java
index 01a7888..65afc0b 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/source/util/package-info.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/source/util/package-info.java
@@ -30,5 +30,4 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Exported
 package com.sun.source.util;
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java
index 5ad9d4b..6d35e1d 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java
@@ -31,7 +31,6 @@
  * The programmatic interface for the Java Programming Language
  * compiler, javac.
  */
-@jdk.Exported
 public class Main {
 
     /** Main entry point for the launcher.
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/package-info.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/package-info.java
index e5f461c..f843a8a 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/package-info.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/package-info.java
@@ -31,5 +31,4 @@
  *  This code and its internal interfaces are subject to change or
  *  deletion without notice.</b>
  */
-@jdk.Exported(false)
 package com.sun.tools.javac.platform;
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CleanProperties.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CleanProperties.java
index 0525b47..03f02d8 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CleanProperties.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CleanProperties.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2015, 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
@@ -66,7 +66,6 @@
     public boolean transform(CompilationService sjavac,
                              Map<String,Set<URI>> pkgSrcs,
                              Set<URI>             visibleSrcs,
-                             Map<URI,Set<String>> visibleClasses,
                              Map<String,Set<String>> oldPackageDependencies,
                              URI destRoot,
                              Map<String,Set<URI>>    packageArtifacts,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java
index c13376d..14fc859 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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,7 +80,6 @@
     public boolean transform(final CompilationService sjavac,
                              Map<String,Set<URI>> pkgSrcs,
                              final Set<URI>             visibleSources,
-                             final Map<URI,Set<String>> visibleClasses,
                              Map<String,Set<String>> oldPackageDependents,
                              URI destRoot,
                              final Map<String,Set<URI>>    packageArtifacts,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileProperties.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileProperties.java
index 18a335f..3ca37b5 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileProperties.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CompileProperties.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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,6 @@
     public boolean transform(CompilationService compilationService,
                              Map<String,Set<URI>> pkgSrcs,
                              Set<URI>             visibleSrcs,
-                             Map<URI,Set<String>> visibleClasses,
                              Map<String,Set<String>> oldPackageDependents,
                              URI destRoot,
                              Map<String,Set<URI>>    packageArtifacts,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CopyFile.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CopyFile.java
index 5b12bcc..5ab8d22 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CopyFile.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/CopyFile.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -61,7 +61,6 @@
     public boolean transform(CompilationService compilationService,
                              Map<String,Set<URI>> pkgSrcs,
                              Set<URI> visibleSrcs,
-                             Map<URI,Set<String>> visibleClasses,
                              Map<String,Set<String>> oldPackageDependents,
                              URI destRoot,
                              Map<String,Set<URI>>    packageArtifacts,
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/JavacState.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/JavacState.java
index 8e1c946..114d128 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/JavacState.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/JavacState.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -120,13 +120,6 @@
     // ones that -sourcepath is allowed to see.
     Set<URI> visibleSrcs;
 
-    // Visible classes for linking. These are the only
-    // ones that -classpath is allowed to see.
-    // It maps from a classpath root to the set of visible classes for that root.
-    // If the set is empty, then all classes are visible for that root.
-    // It can also map from a jar file to the set of visible classes for that jar file.
-    Map<URI,Set<String>> visibleClasses;
-
     // Setup transform that always exist.
     private CompileJavaPackages compileJavaPackages = new CompileJavaPackages();
 
@@ -214,16 +207,6 @@
     }
 
     /**
-     * Specify which classes are visible to the compiler through -classpath.
-     */
-    public void setVisibleClasses(Map<String,Source> vs) {
-        visibleSrcs = new HashSet<>();
-        for (String s : vs.keySet()) {
-            Source src = vs.get(s);
-            visibleSrcs.add(src.file().toURI());
-        }
-    }
-    /**
      * Returns true if this is an incremental build.
      */
     public boolean isIncremental() {
@@ -820,7 +803,6 @@
             boolean r = t.transform(sjavac,
                                     srcs,
                                     visibleSrcs,
-                                    visibleClasses,
                                     prev.dependents(),
                                     outputDir.toURI(),
                                     packageArtifacts,
@@ -954,8 +936,7 @@
             }
         }
         // Read in the file and create another set of filenames with full paths.
-        try {
-            BufferedReader in = new BufferedReader(new FileReader(makefileSourceList));
+        try(BufferedReader in = new BufferedReader(new FileReader(makefileSourceList))) {
             for (;;) {
                 String l = in.readLine();
                 if (l==null) break;
diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/Transformer.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/Transformer.java
index 93e1419..7fcac27 100644
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/Transformer.java
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/Transformer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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,7 +86,6 @@
     boolean transform(CompilationService sjavac,
                       Map<String,Set<URI>> pkgSrcs,
                       Set<URI>             visibleSources,
-                      Map<URI,Set<String>> visibleClasses,
                       Map<String,Set<String>> oldPackageDependencies,
                       URI destRoot,
                       Map<String,Set<URI>>    packageArtifacts,
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java
index 100318f..ace69c0 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/javadoc/package-info.java
@@ -144,5 +144,4 @@
 @see com.sun.javadoc.Doclet
 @see com.sun.javadoc.RootDoc
 */
-@jdk.Exported
 package com.sun.javadoc;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/package-info.java
index 3503e95..7c8766c 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/markup/package-info.java
@@ -31,5 +31,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
  */
-@jdk.Exported(false)
 package com.sun.tools.doclets.formats.html.markup;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/package-info.java
index e4d51f6..dadc9e1 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/formats/html/package-info.java
@@ -36,5 +36,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.formats.html;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package-info.java
index a5e2db3..ef8b4ac 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package-info.java
@@ -37,5 +37,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.internal.toolkit.builders;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/package-info.java
index 5e3f61f..e8bcae2 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/package-info.java
@@ -53,5 +53,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.internal.toolkit;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package-info.java
index cb7d6b6..43750f1 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package-info.java
@@ -48,5 +48,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.internal.toolkit.taglets;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package-info.java
index 7244b53..1319ccd 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package-info.java
@@ -31,5 +31,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.internal.toolkit.util.links;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/package-info.java
index 39f37a3..2e89801 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/util/package-info.java
@@ -32,5 +32,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets.internal.toolkit.util;
diff --git a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/package-info.java b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/package-info.java
index 6df5c2b..0ced35a 100644
--- a/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/package-info.java
+++ b/langtools/src/jdk.javadoc/share/classes/com/sun/tools/doclets/package-info.java
@@ -32,5 +32,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.doclets;
diff --git a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/classfile/package-info.java b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/classfile/package-info.java
index 588ae3b..adcd32c 100644
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/classfile/package-info.java
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/classfile/package-info.java
@@ -33,5 +33,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.classfile;
diff --git a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/javap/package-info.java b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/javap/package-info.java
index aa2de00..77fa318 100644
--- a/langtools/src/jdk.jdeps/share/classes/com/sun/tools/javap/package-info.java
+++ b/langtools/src/jdk.jdeps/share/classes/com/sun/tools/javap/package-info.java
@@ -31,5 +31,4 @@
     This code and its internal interfaces are subject to change or
     deletion without notice.</b>
 */
-@jdk.Exported(false)
 package com.sun.tools.javap;
diff --git a/langtools/test/tools/javac/proprietary/WarnImport.java b/langtools/test/tools/javac/proprietary/WarnImport.java
index 9b536f4..8782a04 100644
--- a/langtools/test/tools/javac/proprietary/WarnImport.java
+++ b/langtools/test/tools/javac/proprietary/WarnImport.java
@@ -9,6 +9,6 @@
  * @compile/fail/ref=WarnImport.out -XDrawDiagnostics  -Werror -Xlint:none WarnImport.java
  */
 
-import sun.misc.VM;
+import sun.security.x509.X509CertInfo;
 
 public class WarnImport {}
diff --git a/langtools/test/tools/javac/proprietary/WarnImport.out b/langtools/test/tools/javac/proprietary/WarnImport.out
index 73582b2..274ffa3 100644
--- a/langtools/test/tools/javac/proprietary/WarnImport.out
+++ b/langtools/test/tools/javac/proprietary/WarnImport.out
@@ -1,4 +1,4 @@
-WarnImport.java:12:16: compiler.warn.sun.proprietary: sun.misc.VM
+WarnImport.java:12:25: compiler.warn.sun.proprietary: sun.security.x509.X509CertInfo
 - compiler.err.warnings.and.werror
 1 error
 1 warning
diff --git a/langtools/test/tools/javac/proprietary/WarnMethod.java b/langtools/test/tools/javac/proprietary/WarnMethod.java
index e9ccbfa..f8eb51d 100644
--- a/langtools/test/tools/javac/proprietary/WarnMethod.java
+++ b/langtools/test/tools/javac/proprietary/WarnMethod.java
@@ -3,7 +3,7 @@
  * @bug     6380059
  * @summary Emit warnings for proprietary packages in the boot class path
  * @author  Peter von der Ah\u00e9
- * @modules java.base/sun.misc
+ * @modules java.base/sun.security.x509
  * @compile WarnMethod.java
  * @compile/fail/ref=WarnMethod.out -XDrawDiagnostics  -Werror WarnMethod.java
  * @compile/fail/ref=WarnMethod.out -XDrawDiagnostics  -Werror -nowarn WarnMethod.java
@@ -12,6 +12,6 @@
 
 public class WarnMethod {
     public static void main(String... args) {
-        System.out.println(sun.misc.VM.getFinalRefCount());
+        System.out.println(sun.security.x509.OIDMap.getOID(""));
     }
 }
diff --git a/langtools/test/tools/javac/proprietary/WarnMethod.out b/langtools/test/tools/javac/proprietary/WarnMethod.out
index 4dc562c..83fb6bd 100644
--- a/langtools/test/tools/javac/proprietary/WarnMethod.out
+++ b/langtools/test/tools/javac/proprietary/WarnMethod.out
@@ -1,4 +1,4 @@
-WarnMethod.java:15:36: compiler.warn.sun.proprietary: sun.misc.VM
+WarnMethod.java:15:45: compiler.warn.sun.proprietary: sun.security.x509.OIDMap
 - compiler.err.warnings.and.werror
 1 error
 1 warning
diff --git a/langtools/test/tools/javac/proprietary/WarnStaticImport.java b/langtools/test/tools/javac/proprietary/WarnStaticImport.java
index 0d78060..91fc369 100644
--- a/langtools/test/tools/javac/proprietary/WarnStaticImport.java
+++ b/langtools/test/tools/javac/proprietary/WarnStaticImport.java
@@ -9,6 +9,6 @@
  * @compile/fail/ref=WarnStaticImport.out -XDrawDiagnostics  -Werror -Xlint:none WarnStaticImport.java
  */
 
-import static sun.misc.VM.getFinalRefCount;
+import static sun.security.x509.OIDMap.getOID;
 
 public class WarnStaticImport {}
diff --git a/langtools/test/tools/javac/proprietary/WarnStaticImport.out b/langtools/test/tools/javac/proprietary/WarnStaticImport.out
index c06c12e..7e7d91f 100644
--- a/langtools/test/tools/javac/proprietary/WarnStaticImport.out
+++ b/langtools/test/tools/javac/proprietary/WarnStaticImport.out
@@ -1,4 +1,4 @@
-WarnStaticImport.java:12:23: compiler.warn.sun.proprietary: sun.misc.VM
+WarnStaticImport.java:12:32: compiler.warn.sun.proprietary: sun.security.x509.OIDMap
 - compiler.err.warnings.and.werror
 1 error
 1 warning
diff --git a/langtools/test/tools/javac/tree/NoPrivateTypesExported.java b/langtools/test/tools/javac/tree/NoPrivateTypesExported.java
index 11c6de3..38b6b96 100644
--- a/langtools/test/tools/javac/tree/NoPrivateTypesExported.java
+++ b/langtools/test/tools/javac/tree/NoPrivateTypesExported.java
@@ -90,8 +90,7 @@
             "java.text.",
             "java.util.",
             "javax.lang.model.",
-            "javax.annotation.processing.SupportedSourceVersion",
-            "jdk.Exported"
+            "javax.annotation.processing.SupportedSourceVersion"
         ));
         Set<String> javaxToolsProcessingAcceptableTemp = new HashSet<>();
         javaxToolsProcessingAcceptableTemp.addAll(javaxLangModelAcceptable);
diff --git a/langtools/test/tools/javac/util/context/T7021650.java b/langtools/test/tools/javac/util/context/T7021650.java
deleted file mode 100644
index 8325dc1..0000000
--- a/langtools/test/tools/javac/util/context/T7021650.java
+++ /dev/null
@@ -1,223 +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.
- *
- * 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 7021650
- * @summary Fix Context issues
- * @library /tools/javac/lib
- * @modules jdk.compiler/com.sun.tools.javac.comp
- *          jdk.compiler/com.sun.tools.javac.file
- *          jdk.compiler/com.sun.tools.javac.main
- *          jdk.compiler/com.sun.tools.javac.processing
- *          jdk.compiler/com.sun.tools.javac.util
- * @build JavacTestingAbstractProcessor T7021650
- * @run main T7021650
- */
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import javax.annotation.processing.*;
-import javax.lang.model.element.*;
-import javax.tools.*;
-
-import com.sun.tools.javac.comp.Attr;
-import com.sun.tools.javac.file.JavacFileManager;
-import com.sun.tools.javac.main.Main;
-import com.sun.tools.javac.processing.JavacProcessingEnvironment;
-import com.sun.tools.javac.util.Context;
-
-public class T7021650 extends JavacTestingAbstractProcessor {
-    public static void main(String... args) throws Exception {
-        new T7021650().run();
-    }
-
-    static File testSrc = new File(System.getProperty("test.src"));
-    static final int MAX_ROUNDS = 3;
-
-    /**
-     * Perform a compilation with custom factories registered in the context,
-     * and verify that corresponding objects are created in each round.
-     */
-    void run() throws Exception {
-        Counter myDemoCounter = new Counter();
-        Counter myAttrCounter = new Counter();
-
-        Context context = new Context();
-        // Use a custom file manager which creates classloaders for annotation
-        // processors with a sensible delegation parent, so that all instances
-        // of test classes come from the same class loader. This is important
-        // because the test performs class checks on the instances of classes
-        // found in the context for each round or processing.
-        context.put(JavaFileManager.class, new Context.Factory<JavaFileManager>() {
-            public JavaFileManager make(Context c) {
-                return new JavacFileManager(c, true, null) {
-                    @Override
-                    protected ClassLoader getClassLoader(URL[] urls) {
-                        return new URLClassLoader(urls, T7021650.class.getClassLoader());
-                    }
-                };
-            }
-        });
-
-        MyDemo.preRegister(context, myDemoCounter);
-        MyAttr.preRegister(context, myAttrCounter);
-
-        String[] args = {
-            "-d", ".",
-            "-processor", T7021650.class.getName(),
-            "-XprintRounds",
-            new File(testSrc, T7021650.class.getName() + ".java").getPath()
-        };
-
-        compile(context, args);
-
-        // the services should only be created once in the current scheme:
-        checkEqual("demoCounter", myDemoCounter.count, 1);
-        checkEqual("myAttrCounter", myAttrCounter.count, 1);
-    }
-
-    void compile(Context context, String... args) throws Exception {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        Main m = new Main("javac", pw);
-        Main.Result res = m.compile(args, context);
-        pw.close();
-        String out = sw.toString();
-        if (!out.isEmpty())
-            System.err.println(out);
-        if (!res.isOK())
-            throw new Exception("compilation failed unexpectedly: result=" + res);
-    }
-
-    void checkEqual(String label, int found, int expect) throws Exception {
-        if (found != expect)
-            throw new Exception("unexpected value for " + label
-                    + ": expected " + expect
-                    + ": found " + found);
-    }
-
-    //---------------
-
-    /*
-     * A custom class unknown to javac but nonetheless registered in the context.
-     */
-    static class Demo {
-        Demo(Context c) {
-            c.put(Demo.class, this);
-        }
-
-        static Demo instance(Context context) {
-            return context.get(Demo.class);
-        }
-    }
-
-    static class MyDemo extends Demo {
-        static void preRegister(Context context, final Counter counter) {
-            context.put(Demo.class, new Context.Factory<Demo>() {
-                public Demo make(Context c) {
-                    counter.count++;
-                    return new MyDemo(c);
-                }
-            });
-        }
-
-        MyDemo(Context c) {
-            super(c);
-        }
-    }
-
-    /**
-     * A custom version of a standard javac component.
-     */
-    static class MyAttr extends Attr {
-        static void preRegister(Context context, final Counter counter) {
-            context.put(attrKey, new Context.Factory<Attr>() {
-                public Attr make(Context c) {
-                    counter.count++;
-                    return new MyAttr(c);
-                }
-            });
-        }
-
-        MyAttr(Context c) {
-            super(c);
-        }
-    }
-
-    static class Counter {
-        int count;
-    }
-
-    //---------------
-
-    int round = 0;
-
-    @Override
-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
-        round++;
-
-        Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
-
-        // verify items in context as expected
-        check("Demo", Demo.instance(context), MyDemo.class);
-        check("Attr", Attr.instance(context), MyAttr.class);
-
-        // For a few rounds, generate new source files, so that we can check whether
-        // values in the context are correctly handled in subsequent processing rounds
-        if (round <= MAX_ROUNDS) {
-            String pkg = "p";
-            String currClass = "Gen" + round;
-            String curr = pkg + "." + currClass;
-            String next = (pkg + ".Gen" + (round + 1));
-            StringBuilder text = new StringBuilder();
-            text.append("package ").append(pkg).append(";\n");
-            text.append("public class ").append(currClass).append(" {\n");
-            if (round < MAX_ROUNDS)
-                text.append("    ").append(next).append(" x;\n");
-            text.append("}\n");
-
-            try {
-                JavaFileObject fo = filer.createSourceFile(curr);
-                Writer out = fo.openWriter();
-                try {
-                    out.write(text.toString());
-                } finally {
-                    out.close();
-                }
-            } catch (IOException e) {
-                throw new Error(e);
-            }
-        }
-
-        return true;
-    }
-
-    void check(String label, Object o, Class<?> clazz) {
-        if (o == null)
-            throw new IllegalStateException(label + ": no item found");
-        if (!clazz.isAssignableFrom(o.getClass()))
-            throw new IllegalStateException(label + ": unexpected class: " + o.getClass());
-    }
-}
diff --git a/langtools/test/tools/jdeps/m/Gee.java b/langtools/test/tools/jdeps/m/Gee.java
index 338478b..194a30d 100644
--- a/langtools/test/tools/jdeps/m/Gee.java
+++ b/langtools/test/tools/jdeps/m/Gee.java
@@ -26,7 +26,7 @@
 
 class Gee extends g.G {
     public sun.security.x509.X509CertInfo cert;
-    public com.sun.tools.classfile.ClassFile cf;     // @jdk.Exported(false)
-    public com.sun.source.tree.BinaryTree tree;      // @jdk.Exported
-    public com.sun.management.ThreadMXBean mxbean;   // @jdk.Exported on package-info
+    public com.sun.tools.classfile.ClassFile cf;     // not exported
+    public com.sun.source.tree.BinaryTree tree;      // exported
+    public com.sun.management.ThreadMXBean mxbean;   // exported
 }
diff --git a/make/common/NON_CORE_PKGS.gmk b/make/common/NON_CORE_PKGS.gmk
index 8d7f1a7..b6d9212 100644
--- a/make/common/NON_CORE_PKGS.gmk
+++ b/make/common/NON_CORE_PKGS.gmk
@@ -79,8 +79,7 @@
 
 TREEAPI_PKGS = com.sun.source.doctree \
     com.sun.source.tree \
-    com.sun.source.util \
-    jdk
+    com.sun.source.util
 
 NASHORNAPI_PKGS = jdk.nashorn.api.scripting \
     jdk.nashorn.api.tree
diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk
index 7c4736a..89a2d07 100644
--- a/make/common/NativeCompilation.gmk
+++ b/make/common/NativeCompilation.gmk
@@ -783,13 +783,13 @@
 
     $1_LD_OBJ_ARG := $$($1_ALL_OBJS)
 
-    # If there are many object files, use an @-file.
+    # If there are many object files, use an @-file...
     ifneq ($$(word 17, $$($1_ALL_OBJS)), )
       $1_OBJ_FILE_LIST := $$($1_OBJECT_DIR)/_$1_objectfilenames.txt
-      ifneq ($(TOOLCHAIN_TYPE),solstudio)
+      ifneq ($(COMPILER_COMMAND_FILE_FLAG),)
         $1_LD_OBJ_ARG := $(COMPILER_COMMAND_FILE_FLAG)$$($1_OBJ_FILE_LIST)
       else
-        # The solstudio linker does not support @-files.
+        # ...except for toolchains which don't support them.
         $1_LD_OBJ_ARG := `cat $$($1_OBJ_FILE_LIST)`
       endif
     endif
diff --git a/modules.xml b/modules.xml
index 825f4ac..d7db4ed 100644
--- a/modules.xml
+++ b/modules.xml
@@ -205,9 +205,6 @@
       <name>javax.security.cert</name>
     </export>
     <export>
-      <name>jdk</name>
-    </export>
-    <export>
       <name>jdk.net</name>
     </export>
     <export>
@@ -233,9 +230,11 @@
       <to>java.logging</to>
       <to>java.management</to>
       <to>java.naming</to>
+      <to>java.rmi</to>
       <to>java.security.jgss</to>
       <to>java.sql</to>
       <to>java.xml</to>
+      <to>jdk.charsets</to>
       <to>jdk.management.resource</to>
       <to>jdk.scripting.nashorn</to>
     </export>
diff --git a/nashorn/.hgtags b/nashorn/.hgtags
index edc7868..a506482 100644
--- a/nashorn/.hgtags
+++ b/nashorn/.hgtags
@@ -333,3 +333,4 @@
 2beaef2b6a880c0bff8c9f57ffca33477d647f8b jdk-9+97
 68a36216f70c0de4c7e36f8978995934fc72ec03 jdk-9+98
 74ddd1339c57cf2c2a13e34e1760006c2e54d1fc jdk-9+99
+da397aea8adad7e6f743b60bfe0c415fc8508df5 jdk-9+100
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/ClassLinker.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/ClassLinker.java
index fdb3e1c..47db85f 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/ClassLinker.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/ClassLinker.java
@@ -102,7 +102,7 @@
         setPropertyGetter("static", FOR_CLASS, ValidationType.EXACT_CLASS);
     }
 
-    private static final MethodHandle FOR_CLASS = new Lookup(MethodHandles.lookup()).findStatic(StaticClass.class,
+    private static final MethodHandle FOR_CLASS = Lookup.PUBLIC.findStatic(StaticClass.class,
             "forClass", MethodType.methodType(StaticClass.class, Class.class));
 
 }
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/OverloadedDynamicMethod.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/OverloadedDynamicMethod.java
index 4496503..b54b32f 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/OverloadedDynamicMethod.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/OverloadedDynamicMethod.java
@@ -112,8 +112,7 @@
     /**
      * Holds a list of all methods.
      */
-    private final LinkedList<SingleDynamicMethod> methods;
-    private final ClassLoader classLoader;
+    private final LinkedList<SingleDynamicMethod> methods = new LinkedList<>();
 
     /**
      * Creates a new overloaded dynamic method.
@@ -122,13 +121,7 @@
      * @param name the name of the method
      */
     OverloadedDynamicMethod(final Class<?> clazz, final String name) {
-        this(new LinkedList<SingleDynamicMethod>(), clazz.getClassLoader(), getClassAndMethodName(clazz, name));
-    }
-
-    private OverloadedDynamicMethod(final LinkedList<SingleDynamicMethod> methods, final ClassLoader classLoader, final String name) {
-        super(name);
-        this.methods = methods;
-        this.classLoader = classLoader;
+        super(getClassAndMethodName(clazz, name));
     }
 
     @Override
@@ -288,10 +281,6 @@
         return b.toString();
     };
 
-    ClassLoader getClassLoader() {
-        return classLoader;
-    }
-
     private static boolean isApplicableDynamically(final LinkerServices linkerServices, final MethodType callSiteType,
             final SingleDynamicMethod m) {
         final MethodType methodType = m.getMethodType();
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/package-info.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/package-info.java
index c00a693..0f15461 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/package-info.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/beans/package-info.java
@@ -85,5 +85,4 @@
  * Contains the linker for ordinary Java objects.
  * @since 1.9
  */
-@jdk.Exported
 package jdk.dynalink.beans;
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/package-info.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/package-info.java
index 69a80d8..ab71a0a 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/package-info.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/package-info.java
@@ -113,5 +113,4 @@
  * </p>
  * @since 1.9
  */
-@jdk.Exported
 package jdk.dynalink.linker;
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/support/package-info.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/support/package-info.java
index fe82e72..b5726e8 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/support/package-info.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/linker/support/package-info.java
@@ -89,5 +89,4 @@
  * </p>
  * @since 1.9
  */
-@jdk.Exported
 package jdk.dynalink.linker.support;
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/package-info.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/package-info.java
index 773783b..e68bf14 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/package-info.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/package-info.java
@@ -273,5 +273,4 @@
  * from B will get a chance to link the call site in A when it encounters the
  * object from B.
  */
-@jdk.Exported
 package jdk.dynalink;
diff --git a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/support/package-info.java b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/support/package-info.java
index 6ed59c0..f2fe698 100644
--- a/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/support/package-info.java
+++ b/nashorn/src/jdk.dynalink/share/classes/jdk/dynalink/support/package-info.java
@@ -87,5 +87,4 @@
  * </p>
  * @since 1.9
  */
-@jdk.Exported
 package jdk.dynalink.support;
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/AbstractJSObject.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/AbstractJSObject.java
index 9db9dd3..ce2c188 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/AbstractJSObject.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/AbstractJSObject.java
@@ -39,7 +39,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public abstract class AbstractJSObject implements JSObject {
     /**
      * Call this object as a JavaScript function. This is equivalent to
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ClassFilter.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ClassFilter.java
index 1a03c17..a19dcd1 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ClassFilter.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ClassFilter.java
@@ -31,7 +31,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public interface ClassFilter {
      /**
       * Should the Java class of the specified name be exposed to scripts?
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/JSObject.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/JSObject.java
index 699c7fe..8545bf7 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/JSObject.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/JSObject.java
@@ -37,7 +37,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public interface JSObject {
     /**
      * Call this object as a JavaScript function. This is equivalent to
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornException.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornException.java
index 1509a7d..b6fa2c6 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornException.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornException.java
@@ -44,7 +44,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 @SuppressWarnings("serial")
 public abstract class NashornException extends RuntimeException {
     // script file name
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngine.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngine.java
index 0f2f3d7..801d0c8 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngine.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngine.java
@@ -69,7 +69,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public final class NashornScriptEngine extends AbstractScriptEngine implements Compilable, Invocable {
     /**
      * Key used to associate Nashorn global object mirror with arbitrary Bindings instance.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java
index f38244c..f05b707 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/NashornScriptEngineFactory.java
@@ -48,7 +48,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public final class NashornScriptEngineFactory implements ScriptEngineFactory {
     @Override
     public String getEngineName() {
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptObjectMirror.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptObjectMirror.java
index e3bd9c2..ea2f51f 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptObjectMirror.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptObjectMirror.java
@@ -60,7 +60,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public final class ScriptObjectMirror extends AbstractJSObject implements Bindings {
     private static AccessControlContext getContextAccCtxt() {
         final Permissions perms = new Permissions();
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptUtils.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptUtils.java
index 6fd52a5..367efa5 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptUtils.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/ScriptUtils.java
@@ -39,7 +39,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public final class ScriptUtils {
     private ScriptUtils() {}
 
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/URLReader.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/URLReader.java
index 85a585c..cca271b 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/URLReader.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/URLReader.java
@@ -39,7 +39,6 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 public final class URLReader extends Reader {
     // underlying URL
     private final URL url;
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/package-info.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/package-info.java
index 1890924..95781bd 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/package-info.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/scripting/package-info.java
@@ -38,5 +38,4 @@
  *
  * @since 1.8u40
  */
-@jdk.Exported
 package jdk.nashorn.api.scripting;
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayAccessTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayAccessTree.java
index ff6b84b..a1373a3 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayAccessTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayAccessTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ArrayAccessTree extends ExpressionTree {
     /**
      * Returns the array that is accessed.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayLiteralTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayLiteralTree.java
index a4c1182..327b585 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayLiteralTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ArrayLiteralTree.java
@@ -32,7 +32,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ArrayLiteralTree extends ExpressionTree {
     /**
      * Returns the list of Array element expressions.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/AssignmentTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/AssignmentTree.java
index d09e1cc..8199aef 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/AssignmentTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/AssignmentTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface AssignmentTree extends ExpressionTree {
     /**
      * Returns the left hand side (LHS) of this assignment.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BinaryTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BinaryTree.java
index b92afc5..84187c2 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BinaryTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BinaryTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface BinaryTree extends ExpressionTree {
     /**
      * Returns left hand side (LHS) of this binary expression.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BlockTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BlockTree.java
index bdb6ed1..efc6d86 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BlockTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BlockTree.java
@@ -39,7 +39,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface BlockTree extends StatementTree {
     /**
      * Returns the list of statements in this block.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BreakTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BreakTree.java
index 79450f3..cdf7297 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BreakTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/BreakTree.java
@@ -37,7 +37,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface BreakTree extends GotoTree {
     /**
      * Label associated with this break statement. This is null
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CaseTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CaseTree.java
index a5c2b69..4d8578d 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CaseTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CaseTree.java
@@ -41,7 +41,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface CaseTree extends Tree {
     /**
      * Case expression of this 'case' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java
index 91e0c3e..ac9b2af2 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CatchTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface CatchTree extends Tree {
     /**
      * Returns the catch parameter identifier of the exception caught.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java
index 60b69ad..0f69ad6 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompilationUnitTree.java
@@ -33,7 +33,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface CompilationUnitTree extends Tree {
     /**
      * Return the list of source elements in this compilation unit.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompoundAssignmentTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompoundAssignmentTree.java
index 228791f..66d4e99 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompoundAssignmentTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/CompoundAssignmentTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface CompoundAssignmentTree extends ExpressionTree {
     /**
      * Returns the left hand side (LHS) of this assignment.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalExpressionTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalExpressionTree.java
index 55b5b09..0eb16e1 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalExpressionTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalExpressionTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ConditionalExpressionTree extends ExpressionTree {
     /**
      * Returns the condition expression of this ternary expression.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalLoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalLoopTree.java
index a621571..103ce58 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalLoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ConditionalLoopTree.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ConditionalLoopTree extends LoopTree {
     /**
      * Returns the condition expression of this 'loop' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ContinueTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ContinueTree.java
index faded12..e1c7d42 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ContinueTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ContinueTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ContinueTree extends GotoTree {
     /**
      * Label associated with this continue statement. This is null
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DebuggerTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DebuggerTree.java
index 92beb54..70a9892 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DebuggerTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DebuggerTree.java
@@ -35,6 +35,5 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface DebuggerTree extends StatementTree {
 }
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Diagnostic.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Diagnostic.java
index 4fa51b7..5eae67e 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Diagnostic.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Diagnostic.java
@@ -42,7 +42,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface Diagnostic {
 
     /**
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DiagnosticListener.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DiagnosticListener.java
index d84fe87..a79829f 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DiagnosticListener.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DiagnosticListener.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 @FunctionalInterface
 public interface DiagnosticListener {
     /**
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DoWhileLoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DoWhileLoopTree.java
index 80632ed..de4d848 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DoWhileLoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/DoWhileLoopTree.java
@@ -37,7 +37,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface DoWhileLoopTree extends ConditionalLoopTree {
     /**
      * Returns the condition expression of this do-while statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/EmptyStatementTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/EmptyStatementTree.java
index 30667b0..280ae6d 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/EmptyStatementTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/EmptyStatementTree.java
@@ -35,5 +35,4 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface EmptyStatementTree extends StatementTree {}
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ErroneousTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ErroneousTree.java
index b335bae..eb78051 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ErroneousTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ErroneousTree.java
@@ -30,6 +30,5 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ErroneousTree extends ExpressionTree {
 }
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionStatementTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionStatementTree.java
index 3c07edb..8881031 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionStatementTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionStatementTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ExpressionStatementTree extends StatementTree {
     /**
      * Returns the expression of this expression statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionTree.java
index f831855..7fa88a1 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ExpressionTree.java
@@ -31,5 +31,4 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ExpressionTree extends Tree {}
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForInLoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForInLoopTree.java
index 0e28497..84a9155 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForInLoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForInLoopTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ForInLoopTree extends LoopTree {
     /**
      * The for..in left hand side expression.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForLoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForLoopTree.java
index 9d6e538..83fc390 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForLoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ForLoopTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ForLoopTree extends ConditionalLoopTree {
     /**
      * Returns the initializer expression of this 'for' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionCallTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionCallTree.java
index 8157f13..82a0651 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionCallTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionCallTree.java
@@ -39,7 +39,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface FunctionCallTree extends ExpressionTree {
     /**
      * Returns the function being called.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java
index df55089..3453468 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionDeclarationTree.java
@@ -39,7 +39,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface FunctionDeclarationTree extends StatementTree {
     /**
      * Returns the name of the function being declared.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java
index 40b4053..260eef9 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/FunctionExpressionTree.java
@@ -39,7 +39,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface FunctionExpressionTree extends ExpressionTree {
     /**
      * Returns the name of the function being declared.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/GotoTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/GotoTree.java
index fb0517e..4c77ad4 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/GotoTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/GotoTree.java
@@ -33,7 +33,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface GotoTree extends StatementTree {
     /**
      * Label associated with this goto statement. This is null
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java
index 03035b6..8af1922 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IdentifierTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface IdentifierTree extends ExpressionTree {
     /**
      * Returns the name of this identifier.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IfTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IfTree.java
index fe98193..d0ffebf 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IfTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/IfTree.java
@@ -41,7 +41,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface IfTree extends StatementTree {
     /**
      * Returns the condition expression of this 'if' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/InstanceOfTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/InstanceOfTree.java
index f1b36f9..7eb4506 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/InstanceOfTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/InstanceOfTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface InstanceOfTree extends ExpressionTree {
     /**
      * Returns the expression whose type is being checked.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LabeledStatementTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LabeledStatementTree.java
index 893fafd..dd2c643 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LabeledStatementTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LabeledStatementTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface LabeledStatementTree extends StatementTree {
     /**
      * Returns the label associated with this statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LineMap.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LineMap.java
index f65d39d..3a4f050 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LineMap.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LineMap.java
@@ -31,7 +31,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface LineMap {
     /**
      * Find the line containing a position; a line termination
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LiteralTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LiteralTree.java
index 4bae2d1..5ec1c32 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LiteralTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LiteralTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface LiteralTree extends ExpressionTree {
     /**
      * Returns the value of this literal.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LoopTree.java
index 4d2ca02..9768705 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/LoopTree.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface LoopTree extends StatementTree {
     /**
      * Returns the statement contained in this 'loop' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/MemberSelectTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/MemberSelectTree.java
index d34214e..d145737 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/MemberSelectTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/MemberSelectTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface MemberSelectTree extends ExpressionTree {
     /**
      * The object expression whose member is being selected.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/NewTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/NewTree.java
index 59c536d..ecad024 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/NewTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/NewTree.java
@@ -37,7 +37,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface NewTree extends ExpressionTree {
     /**
      * Returns the constructor expression of this 'new' expression.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ObjectLiteralTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ObjectLiteralTree.java
index 7639935..f287786 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ObjectLiteralTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ObjectLiteralTree.java
@@ -32,7 +32,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ObjectLiteralTree extends ExpressionTree {
     /**
      * Returns the list of properties of this object literal.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParenthesizedTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParenthesizedTree.java
index 2352742..d90bc8c 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParenthesizedTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ParenthesizedTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ParenthesizedTree extends ExpressionTree {
     /**
      * Returns the expression within the parenthesis.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java
index 627351a..10bbebe 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Parser.java
@@ -38,7 +38,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface Parser {
     /**
      * Parses the source file and returns compilation unit tree
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java
index b7bdd20..fed1e42 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/PropertyTree.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface PropertyTree extends Tree {
     /**
      * Returns the name of this property.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java
index d8b4a42..2b09e52 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/RegExpLiteralTree.java
@@ -30,7 +30,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface RegExpLiteralTree extends Tree {
     /**
      * Regular expression pattern to match.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ReturnTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ReturnTree.java
index 11fd296..765c9d7 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ReturnTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ReturnTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ReturnTree extends StatementTree {
     /**
      * Returns the expression being returned. This is null if no value
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/StatementTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/StatementTree.java
index c508239..7dc58da 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/StatementTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/StatementTree.java
@@ -31,6 +31,5 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface StatementTree extends Tree {
 }
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SwitchTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SwitchTree.java
index 48c1bd7..3c9da0e 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SwitchTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/SwitchTree.java
@@ -39,7 +39,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface SwitchTree extends StatementTree {
     /**
      * Returns the expression on which this statement switches.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ThrowTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ThrowTree.java
index 339abb0..c1f0a67 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ThrowTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/ThrowTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface ThrowTree extends StatementTree {
     /**
      * Returns the expression being thrown.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java
index 210ec56..13cd6f8 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/Tree.java
@@ -33,13 +33,11 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface Tree {
 
     /**
      * Enumerates all kinds of trees.
      */
-    @jdk.Exported
     public enum Kind {
         /**
          * Used for instances of {@link ArrayAccessTree}.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java
index ee064b2..f97b520 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TreeVisitor.java
@@ -53,7 +53,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface TreeVisitor<R,P> {
     /**
      * Visit assignment tree.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TryTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TryTree.java
index 59fbdcc..583d560 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TryTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/TryTree.java
@@ -41,7 +41,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface TryTree extends StatementTree {
     /**
      * Returns the 'try' block of this 'try' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnaryTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnaryTree.java
index e2e1bc2..16fb334 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnaryTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnaryTree.java
@@ -38,7 +38,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface UnaryTree extends ExpressionTree {
     /**
      * Returns the expression operated by the unary operator.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnknownTreeException.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnknownTreeException.java
index 2892568..0a801b8 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnknownTreeException.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/UnknownTreeException.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public class UnknownTreeException extends RuntimeException {
 
     private static final long serialVersionUID = 1L;
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java
index aec0e6c..2fd4d42 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/VariableTree.java
@@ -35,7 +35,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface VariableTree extends StatementTree {
     /**
      * Returns the name of this variable.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WhileLoopTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WhileLoopTree.java
index 5910caf..63fb01a 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WhileLoopTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WhileLoopTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface WhileLoopTree extends ConditionalLoopTree {
     /**
      * The condition expression of this 'while' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WithTree.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WithTree.java
index 96c4b2a..684498c 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WithTree.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/WithTree.java
@@ -36,7 +36,6 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 public interface WithTree extends StatementTree {
     /**
      * The scope object expression for this 'with' statement.
diff --git a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/package-info.java b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/package-info.java
index 1c2d048..725856c 100644
--- a/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/package-info.java
+++ b/nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/api/tree/package-info.java
@@ -70,6 +70,5 @@
  *
  * @since 1.9
  */
-@jdk.Exported
 package jdk.nashorn.api.tree;
 
diff --git a/nashorn/test/script/basic/JDK-8134488.js b/nashorn/test/script/basic/JDK-8134488.js
index 928961a..68b3ebb 100644
--- a/nashorn/test/script/basic/JDK-8134488.js
+++ b/nashorn/test/script/basic/JDK-8134488.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * 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
diff --git a/nashorn/test/script/basic/JDK-8134490.js b/nashorn/test/script/basic/JDK-8134490.js
index d7c10fd..2a2a012 100644
--- a/nashorn/test/script/basic/JDK-8134490.js
+++ b/nashorn/test/script/basic/JDK-8134490.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * 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
diff --git a/nashorn/test/script/basic/JDK-8134939.js b/nashorn/test/script/basic/JDK-8134939.js
index 4f22ef0..0aa1b82 100644
--- a/nashorn/test/script/basic/JDK-8134939.js
+++ b/nashorn/test/script/basic/JDK-8134939.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * 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
