diff --git a/android_icu4j/src/main/java/android/icu/lang/UCharacter.java b/android_icu4j/src/main/java/android/icu/lang/UCharacter.java
index 96c72ae..ad24d9e 100644
--- a/android_icu4j/src/main/java/android/icu/lang/UCharacter.java
+++ b/android_icu4j/src/main/java/android/icu/lang/UCharacter.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /**
  *******************************************************************************
- * Copyright (C) 1996-2015, International Business Machines Corporation and
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -2054,8 +2054,9 @@
         }
 
         /**
-         * Cover the JDK 1.5 API.  Return the Unicode block with the
-         * given name. <strong>[icu] Note:</strong> Unlike JDK 1.5, this only matches
+         * Alternative to the {@link java.lang.Character.UnicodeBlock#forName(String)} method.
+         * Returns the Unicode block with the given name. <strong>[icu] Note:</strong> Unlike
+         * {@link java.lang.Character.UnicodeBlock#forName(String)}, this only matches
          * against the official UCD name and the Java block name
          * (ignoring case).
          * @param blockName the name of the block to match
@@ -5266,7 +5267,8 @@
     public static final int MIN_CODE_POINT = Character.MIN_CODE_POINT;
 
     /**
-     * Cover the JDK 1.5 API, for convenience.
+     * Equivalent to {@link Character#isValidCodePoint}.
+     *
      * @param cp the code point to check
      * @return true if cp is a valid code point
      */
@@ -5508,11 +5510,12 @@
     }
 
     /**
-     * Cover the JDK API, for convenience.  Return a byte representing the directionality of
-     * the character.
+     * Equivalent to the {@link Character#getDirectionality(char)} method, for
+     * convenience. Returns a byte representing the directionality of the
+     * character.
      *
-     * <strong>[icu] Note:</strong> Unlike the JDK, this returns DIRECTIONALITY_LEFT_TO_RIGHT for undefined
-     * or out-of-bounds characters.
+     * <strong>[icu] Note:</strong> Unlike {@link Character#getDirectionality(char)}, this returns
+     * DIRECTIONALITY_LEFT_TO_RIGHT for undefined or out-of-bounds characters.
      *
      * <strong>[icu] Note:</strong> The return value must be tested using the constants defined in {@link
      * UCharacterDirection} and its interface {@link
@@ -5528,7 +5531,9 @@
     }
 
     /**
-     * Cover the JDK API, for convenience.  Count the number of code points in the range of text.
+     * Equivalent to the {@link Character#codePointCount(CharSequence, int, int)}
+     * method, for convenience.  Counts the number of code points in the range
+     * of text.
      * @param text the characters to check
      * @param start the start of the range
      * @param limit the limit of the range
@@ -5556,7 +5561,8 @@
     }
 
     /**
-     * Cover the JDK API, for convenience.  Count the number of code points in the range of text.
+     * Equivalent to the {@link Character#codePointCount(char[], int, int)} method, for
+     * convenience. Counts the number of code points in the range of text.
      * @param text the characters to check
      * @param start the start of the range
      * @param limit the limit of the range
@@ -5584,7 +5590,8 @@
     }
 
     /**
-     * Cover the JDK API, for convenience.  Adjust the char index by a code point offset.
+     * Equivalent to the {@link Character#offsetByCodePoints(CharSequence, int, int)}
+     * method, for convenience.  Adjusts the char index by a code point offset.
      * @param text the characters to check
      * @param index the index to adjust
      * @param codePointOffset the number of code points by which to offset the index
@@ -5627,7 +5634,9 @@
     }
 
     /**
-     * Cover the JDK API, for convenience.  Adjust the char index by a code point offset.
+     * Equivalent to the
+     * {@link Character#offsetByCodePoints(char[], int, int, int, int)}
+     * method, for convenience.  Adjusts the char index by a code point offset.
      * @param text the characters to check
      * @param start the start of the range to check
      * @param count the length of the range to check
diff --git a/android_icu4j/src/main/java/android/icu/lang/UCharacterEnums.java b/android_icu4j/src/main/java/android/icu/lang/UCharacterEnums.java
index 8f6cd09..3344c43 100644
--- a/android_icu4j/src/main/java/android/icu/lang/UCharacterEnums.java
+++ b/android_icu4j/src/main/java/android/icu/lang/UCharacterEnums.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /**
  *******************************************************************************
- * Copyright (C) 2004-2013, International Business Machines Corporation and
+ * Copyright (C) 2004-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -20,7 +20,7 @@
     /**
      * 'Enum' for the CharacterCategory constants.  These constants are 
      * compatible in name <b>but not in value</b> with those defined in
-     * <code>java.lang.Character</code>.
+     * {@link java.lang.Character}.
      * @see UCharacterCategory
      */
     public static interface ECharacterCategory {
@@ -204,10 +204,9 @@
     }
 
     /**
-     * 'Enum' for the CharacterDirection constants.  There are two sets
-     * of names, those used in ICU, and those used in the JDK.  The
-     * JDK constants are compatible in name <b>but not in value</b> 
-     * with those defined in <code>java.lang.Character</code>.
+     * 'Enum' for the CharacterDirection constants. Some constants are
+     * compatible in name <b>but not in value</b> with those defined in
+     * {@link java.lang.Character}.
      * @see UCharacterDirection
      */
     public static interface ECharacterDirection {
@@ -217,7 +216,9 @@
         public static final int LEFT_TO_RIGHT              = 0;
 
         /**
-         * JDK-compatible synonym for LEFT_TO_RIGHT.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT}.
+         * Synonym of {@link #LEFT_TO_RIGHT}.
          */
         public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = (byte)LEFT_TO_RIGHT;
 
@@ -227,7 +228,9 @@
         public static final int RIGHT_TO_LEFT              = 1;
 
         /**
-         * JDK-compatible synonym for RIGHT_TO_LEFT.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT}.
+         * Synonym of {@link #RIGHT_TO_LEFT}.
          */
         public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = (byte)RIGHT_TO_LEFT;
 
@@ -237,7 +240,9 @@
         public static final int EUROPEAN_NUMBER            = 2;
 
         /**
-         * JDK-compatible synonym for EUROPEAN_NUMBER.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER}.
+         * Synonym of {@link #EUROPEAN_NUMBER}.
          */
         public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = (byte)EUROPEAN_NUMBER;
 
@@ -247,7 +252,9 @@
         public static final int EUROPEAN_NUMBER_SEPARATOR  = 3;
 
         /**
-         * JDK-compatible synonym for EUROPEAN_NUMBER_SEPARATOR.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR}.
+         * Synonym of {@link #EUROPEAN_NUMBER_SEPARATOR}.
          */
         public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = (byte)EUROPEAN_NUMBER_SEPARATOR;
 
@@ -257,7 +264,9 @@
         public static final int EUROPEAN_NUMBER_TERMINATOR = 4;
 
         /**
-         * JDK-compatible synonym for EUROPEAN_NUMBER_TERMINATOR.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR}.
+         * Synonym of {@link #EUROPEAN_NUMBER_TERMINATOR}.
          */
         public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = (byte)EUROPEAN_NUMBER_TERMINATOR;
 
@@ -267,7 +276,9 @@
         public static final int ARABIC_NUMBER              = 5;
 
         /**
-         * JDK-compatible synonym for ARABIC_NUMBER.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_ARABIC_NUMBER}.
+         * Synonym of {@link #ARABIC_NUMBER}.
          */
         public static final byte DIRECTIONALITY_ARABIC_NUMBER = (byte)ARABIC_NUMBER;
 
@@ -277,7 +288,9 @@
         public static final int COMMON_NUMBER_SEPARATOR    = 6;
 
         /**
-         * JDK-compatible synonym for COMMON_NUMBER_SEPARATOR.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR}.
+         * Synonym of {@link #COMMON_NUMBER_SEPARATOR}.
          */
         public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = (byte)COMMON_NUMBER_SEPARATOR;
 
@@ -287,7 +300,9 @@
         public static final int BLOCK_SEPARATOR            = 7;
 
         /**
-         * JDK-compatible synonym for BLOCK_SEPARATOR.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR}.
+         * Synonym of {@link #BLOCK_SEPARATOR}.
          */
         public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = (byte)BLOCK_SEPARATOR;
 
@@ -297,7 +312,9 @@
         public static final int SEGMENT_SEPARATOR          = 8;
 
         /**
-         * JDK-compatible synonym for SEGMENT_SEPARATOR.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_SEGMENT_SEPARATOR}.
+         * Synonym of {@link #SEGMENT_SEPARATOR}.
          */
         public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = (byte)SEGMENT_SEPARATOR;
 
@@ -307,7 +324,8 @@
         public static final int WHITE_SPACE_NEUTRAL        = 9;
 
         /**
-         * JDK-compatible synonym for WHITE_SPACE_NEUTRAL.
+         * Equivalent to {@link java.lang.Character#DIRECTIONALITY_WHITESPACE}.
+         * Synonym of {@link #WHITE_SPACE_NEUTRAL}.
          */
         public static final byte DIRECTIONALITY_WHITESPACE = (byte)WHITE_SPACE_NEUTRAL;
 
@@ -317,7 +335,8 @@
         public static final int OTHER_NEUTRAL              = 10;
 
         /**
-         * JDK-compatible synonym for OTHER_NEUTRAL.
+         * Equivalent to {@link java.lang.Character#DIRECTIONALITY_OTHER_NEUTRALS}.
+         * Synonym of {@link #OTHER_NEUTRAL}.
          */
         public static final byte DIRECTIONALITY_OTHER_NEUTRALS = (byte)OTHER_NEUTRAL;
 
@@ -327,7 +346,9 @@
         public static final int LEFT_TO_RIGHT_EMBEDDING    = 11;
 
         /**
-         * JDK-compatible synonym for LEFT_TO_RIGHT_EMBEDDING.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING}.
+         * Synonym of {@link #LEFT_TO_RIGHT_EMBEDDING}.
          */
         public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = (byte)LEFT_TO_RIGHT_EMBEDDING;
 
@@ -337,7 +358,9 @@
         public static final int LEFT_TO_RIGHT_OVERRIDE     = 12;  
 
         /**
-         * JDK-compatible synonym for LEFT_TO_RIGHT_OVERRIDE.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE}.
+         * Synonym of {@link #LEFT_TO_RIGHT_OVERRIDE}.
          */
         public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = (byte)LEFT_TO_RIGHT_OVERRIDE;
 
@@ -347,7 +370,9 @@
         public static final int RIGHT_TO_LEFT_ARABIC       = 13;
 
         /**
-         * JDK-compatible synonym for RIGHT_TO_LEFT_ARABIC.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC}.
+         * Synonym of {@link #RIGHT_TO_LEFT_ARABIC}.
          */
         public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = (byte)RIGHT_TO_LEFT_ARABIC;
 
@@ -357,7 +382,9 @@
         public static final int RIGHT_TO_LEFT_EMBEDDING    = 14;
 
         /**
-         * JDK-compatible synonym for RIGHT_TO_LEFT_EMBEDDING.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING}.
+         * Synonym of {@link #RIGHT_TO_LEFT_EMBEDDING}.
          */
         public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = (byte)RIGHT_TO_LEFT_EMBEDDING;
 
@@ -367,7 +394,9 @@
         public static final int RIGHT_TO_LEFT_OVERRIDE     = 15;
 
         /**
-         * JDK-compatible synonym for RIGHT_TO_LEFT_OVERRIDE.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE}.
+         * Synonym of {@link #RIGHT_TO_LEFT_OVERRIDE}.
          */
         public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = (byte)RIGHT_TO_LEFT_OVERRIDE;
 
@@ -377,7 +406,9 @@
         public static final int POP_DIRECTIONAL_FORMAT     = 16;
 
         /**
-         * JDK-compatible synonym for POP_DIRECTIONAL_FORMAT.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT}.
+         * Synonym of {@link #POP_DIRECTIONAL_FORMAT}.
          */
         public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = (byte)POP_DIRECTIONAL_FORMAT;
 
@@ -387,7 +418,9 @@
         public static final int DIR_NON_SPACING_MARK       = 17;
 
         /**
-         * JDK-compatible synonym for DIR_NON_SPACING_MARK.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_NONSPACING_MARK}.
+         * Synonym of {@link #DIR_NON_SPACING_MARK}.
          */
         public static final byte DIRECTIONALITY_NONSPACING_MARK = (byte)DIR_NON_SPACING_MARK;
 
@@ -397,7 +430,9 @@
         public static final int BOUNDARY_NEUTRAL           = 18;
 
         /**
-         * JDK-compatible synonym for BOUNDARY_NEUTRAL.
+         * Equivalent to {@link
+         * java.lang.Character#DIRECTIONALITY_BOUNDARY_NEUTRAL}.
+         * Synonym of {@link #BOUNDARY_NEUTRAL}.
          */
         public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = (byte)BOUNDARY_NEUTRAL;
 
diff --git a/android_icu4j/src/main/java/android/icu/text/CurrencyDisplayNames.java b/android_icu4j/src/main/java/android/icu/text/CurrencyDisplayNames.java
index 889d9b4..9f59da2 100644
--- a/android_icu4j/src/main/java/android/icu/text/CurrencyDisplayNames.java
+++ b/android_icu4j/src/main/java/android/icu/text/CurrencyDisplayNames.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2009-2015, International Business Machines Corporation and    *
+ * Copyright (C) 2009-2016, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -77,7 +77,7 @@
      * for the locale, but not data for the requested ISO code, null is returned
      * from those APIs instead of a substitute value.
      * 
-     * @param locale the JDK locale into which to localize the names
+     * @param locale the {@link java.util.Locale} into which to localize the names
      * @param noSubstitute if true, do not return substitute values.
      * @return a CurrencyDisplayNames
      */
diff --git a/android_icu4j/src/main/java/android/icu/text/DateFormat.java b/android_icu4j/src/main/java/android/icu/text/DateFormat.java
index ecef9ed..a8657ed 100644
--- a/android_icu4j/src/main/java/android/icu/text/DateFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/DateFormat.java
@@ -1,6 +1,6 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
- *   Copyright (C) 1996-2015, International Business Machines
+ *   Copyright (C) 1996-2016, International Business Machines
  *   Corporation and others.  All Rights Reserved.
  */
 
@@ -1750,10 +1750,6 @@
     /**
      * Creates a {@link DateFormat} object that can be used to format times in
      * the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a time format is desired.
      *
      * @param timeStyle The type of time format desired.  This can be
@@ -1772,10 +1768,6 @@
     /**
      * Creates a {@link DateFormat} object that can be used to format times in
      * the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a time format is desired.
      *
      * @param timeStyle The type of time format desired.  This can be
@@ -1794,10 +1786,6 @@
     /**
      * Creates a {@link DateFormat} object that can be used to format dates and times in
      * the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a date/time format is desired.
      *
      * @param dateStyle The type of date format desired.  This can be
@@ -1821,10 +1809,6 @@
     /**
      * Creates a {@link DateFormat} object that can be used to format dates and times in
      * the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a date/time format is desired.
      *
      * @param dateStyle The type of date format desired.  This can be
@@ -1898,10 +1882,6 @@
     /**
      * Creates a {@link DateFormat} object that can be used to format times in
      * the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a time format is desired.
      *
      * @param timeStyle The type of time format desired.  This can be
@@ -1917,10 +1897,6 @@
     /**
      * Creates a {@link DateFormat} object for the default locale that can be used to format
      * dates and times in the calendar system specified by <code>cal</code>.
-     * <p>
-     * <b>Note:</b> When this functionality is moved into the core JDK, this method
-     * will probably be replaced by a new overload of {@link DateFormat#getInstance}.
-     * <p>
      * @param cal   The calendar system for which a date/time format is desired.
      *
      * @param dateStyle The type of date format desired.  This can be
diff --git a/android_icu4j/src/main/java/android/icu/text/DateFormatSymbols.java b/android_icu4j/src/main/java/android/icu/text/DateFormatSymbols.java
index 2870e46..f34daa9 100644
--- a/android_icu4j/src/main/java/android/icu/text/DateFormatSymbols.java
+++ b/android_icu4j/src/main/java/android/icu/text/DateFormatSymbols.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 1996-2015, International Business Machines Corporation and
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -1253,12 +1253,13 @@
      * When a localized display name is not available, the corresponding
      * array element will be <code>null</code>.
      * <p>
-     * <b>Note</b>: ICU implements time zone display name formatting algorithm
+     * <b>Note</b>: ICU implements the time zone display name formatting algorithm
      * specified by <a href="http://www.unicode.org/reports/tr35/">UTS#35 Unicode
      * Locale Data Markup Language(LDML)</a>. The algorithm supports historic
-     * display name changes and various different type of names not available in
-     * JDK. For accessing the full set of time zone string data used by ICU implementation,
-     * you should use {@link TimeZoneNames} APIs instead.
+     * display name changes and various different types of names not available in
+     * {@link java.text.DateFormatSymbols#getZoneStrings()}. For accessing the full
+     * set of time zone string data used by ICU implementation, you should use
+     * {@link TimeZoneNames} APIs instead.
      * 
      * @return the time zone strings.
      */
diff --git a/android_icu4j/src/main/java/android/icu/text/DateIntervalInfo.java b/android_icu4j/src/main/java/android/icu/text/DateIntervalInfo.java
index 38f1d7f..53a1e3a 100644
--- a/android_icu4j/src/main/java/android/icu/text/DateIntervalInfo.java
+++ b/android_icu4j/src/main/java/android/icu/text/DateIntervalInfo.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2008-2015, International Business Machines Corporation and    *
+ * Copyright (C) 2008-2016, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -352,7 +352,7 @@
 
 
     /** 
-     * Construct DateIntervalInfo for the given JDK locale,
+     * Construct DateIntervalInfo for the given {@link java.util.Locale}.
      * @param locale  the interval patterns are loaded from the appropriate 
      *                calendar data (specified calendar or default calendar)
      *                in this locale.
diff --git a/android_icu4j/src/main/java/android/icu/text/DateTimePatternGenerator.java b/android_icu4j/src/main/java/android/icu/text/DateTimePatternGenerator.java
index cf6e69e..c47e27a 100644
--- a/android_icu4j/src/main/java/android/icu/text/DateTimePatternGenerator.java
+++ b/android_icu4j/src/main/java/android/icu/text/DateTimePatternGenerator.java
@@ -85,7 +85,7 @@
 
     /**
      * Construct a flexible generator according to data for a given locale.
-     * @param locale The JDK locale to pass.
+     * @param locale The {@link java.text.Locale} to pass.
      */
     public static DateTimePatternGenerator getInstance(Locale locale) {
         return getInstance(ULocale.forLocale(locale));
diff --git a/android_icu4j/src/main/java/android/icu/text/DecimalFormatSymbols.java b/android_icu4j/src/main/java/android/icu/text/DecimalFormatSymbols.java
index 872c96e..bec929c 100644
--- a/android_icu4j/src/main/java/android/icu/text/DecimalFormatSymbols.java
+++ b/android_icu4j/src/main/java/android/icu/text/DecimalFormatSymbols.java
@@ -432,8 +432,8 @@
     }
 
     /**
-     * Returns the currency symbol, for JDK 1.4 compatibility only.
-     * ICU clients should use the Currency API directly.
+     * Returns the currency symbol, for {@link DecimalFormatSymbols#getCurrency()} API
+     * compatibility only. ICU clients should use the Currency API directly.
      * @return the currency used, or null
      */
     public Currency getCurrency() {
diff --git a/android_icu4j/src/main/java/android/icu/text/LocaleDisplayNames.java b/android_icu4j/src/main/java/android/icu/text/LocaleDisplayNames.java
index b9020bf..f168d1c 100644
--- a/android_icu4j/src/main/java/android/icu/text/LocaleDisplayNames.java
+++ b/android_icu4j/src/main/java/android/icu/text/LocaleDisplayNames.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2009-2015, International Business Machines Corporation and    *
+ * Copyright (C) 2009-2016, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -57,7 +57,7 @@
     /**
      * Convenience overload of {@link #getInstance(Locale, DisplayContext...)} that specifies
      * {@link DisplayContext#STANDARD_NAMES}.
-     * @param locale the display JDK locale
+     * @param locale the display {@link java.util.Locale}
      * @return a LocaleDisplayNames instance
      */
     public static LocaleDisplayNames getInstance(Locale locale) {
@@ -116,9 +116,9 @@
     }
 
     /**
-     * Returns an instance of LocaleDisplayNames that returns names formatted for the provided JDK
-     * locale, using the provided DisplayContext settings
-     * @param locale the display JDK locale
+     * Returns an instance of LocaleDisplayNames that returns names formatted for the provided
+     * {@link java.util.Locale}, using the provided DisplayContext settings
+     * @param locale the display {@link java.util.Locale}
      * @param contexts one or more context settings (e.g. for dialect
      *              handling, capitalization, etc.
      * @return a LocaleDisplayNames instance
diff --git a/android_icu4j/src/main/java/android/icu/text/MeasureFormat.java b/android_icu4j/src/main/java/android/icu/text/MeasureFormat.java
index ce090e6..cc3d78d 100644
--- a/android_icu4j/src/main/java/android/icu/text/MeasureFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/MeasureFormat.java
@@ -212,9 +212,9 @@
     }
 
     /**
-     * Create a format from the JDK locale, formatWidth, and format.
+     * Create a format from the {@link java.util.Locale} and formatWidth.
      *
-     * @param locale the JDK locale.
+     * @param locale the {@link java.util.Locale}.
      * @param formatWidth hints how long formatted strings should be.
      * @return The new MeasureFormat object.
      */
@@ -261,9 +261,9 @@
     }
 
     /**
-     * Create a format from the JDK locale, formatWidth, and format.
+     * Create a format from the {@link java.util.Locale}, formatWidth, and format.
      *
-     * @param locale the JDK locale.
+     * @param locale the {@link java.util.Locale}.
      * @param formatWidth hints how long formatted strings should be.
      * @param format This is defensively copied.
      * @return The new MeasureFormat object.
@@ -609,8 +609,8 @@
 
     /**
      * Return a formatter for CurrencyAmount objects in the given
-     * JDK locale.
-     * @param locale desired JDK locale
+     * {@link java.util.Locale}.
+     * @param locale desired {@link java.util.Locale}
      * @return a formatter object
      */
     public static MeasureFormat getCurrencyFormat(Locale locale) {
diff --git a/android_icu4j/src/main/java/android/icu/text/MessageFormat.java b/android_icu4j/src/main/java/android/icu/text/MessageFormat.java
index bb96ad6..28ecbc0 100644
--- a/android_icu4j/src/main/java/android/icu/text/MessageFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/MessageFormat.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
 **********************************************************************
-* Copyright (c) 2004-2014, International Business Machines
+* Copyright (c) 2004-2016, International Business Machines
 * Corporation and others.  All Rights Reserved.
 **********************************************************************
 * Author: Alan Liu
@@ -2410,12 +2410,12 @@
      * <strong>[icu]</strong> Converts an 'apostrophe-friendly' pattern into a standard
      * pattern.
      * <em>This is obsolete for ICU 4.8 and higher MessageFormat pattern strings.</em>
-     * It can still be useful together with the JDK MessageFormat.
+     * It can still be useful together with {@link java.text.MessageFormat}.
      *
      * <p>See the class description for more about apostrophes and quoting,
-     * and differences between ICU and the JDK.
+     * and differences between ICU and {@link java.text.MessageFormat}.
      *
-     * <p>The JDK MessageFormat and ICU 4.6 and earlier MessageFormat
+     * <p>{@link java.text.MessageFormat} and ICU 4.6 and earlier MessageFormat
      * treat all ASCII apostrophes as
      * quotes, which is problematic in some languages, e.g.
      * French, where apostrophe is commonly used.  This utility
diff --git a/android_icu4j/src/main/java/android/icu/text/MessagePattern.java b/android_icu4j/src/main/java/android/icu/text/MessagePattern.java
index 73af3fb..beba378 100644
--- a/android_icu4j/src/main/java/android/icu/text/MessagePattern.java
+++ b/android_icu4j/src/main/java/android/icu/text/MessagePattern.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
 *******************************************************************************
-*   Copyright (C) 2010-2014, International Business Machines
+*   Copyright (C) 2010-2016, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   created on: 2010aug21
@@ -128,7 +128,7 @@
          * a double apostrophe pattern character.
          * A single apostrophe always starts quoted literal text.
          * <p>
-         * This is the behavior of ICU 4.6 and earlier, and of the JDK.
+         * This is the behavior of ICU 4.6 and earlier, and of {@link java.text.MessageFormat}.
          */
         DOUBLE_REQUIRED
     }
diff --git a/android_icu4j/src/main/java/android/icu/text/NumberFormat.java b/android_icu4j/src/main/java/android/icu/text/NumberFormat.java
index 4840aee..7bc2768 100644
--- a/android_icu4j/src/main/java/android/icu/text/NumberFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/NumberFormat.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 1996-2015, International Business Machines Corporation and    *
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -1686,8 +1686,8 @@
     private static final long serialVersionUID = -2308460125733713944L;
 
     /**
-     * Empty constructor.  Public for compatibility with JDK which lets the
-     * compiler generate a default public constructor even though this is
+     * Empty constructor.  Public for API compatibility with historic versions of
+     * {@link java.text.NumberFormat} which had public constructor even though this is
      * an abstract class.
      */
     public NumberFormat() {
diff --git a/android_icu4j/src/main/java/android/icu/text/PluralFormat.java b/android_icu4j/src/main/java/android/icu/text/PluralFormat.java
index ee8f675..78e656d 100644
--- a/android_icu4j/src/main/java/android/icu/text/PluralFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/PluralFormat.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2007-2015, International Business Machines Corporation and
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -199,7 +199,8 @@
     }
 
     /**
-     * Creates a new cardinal-number <code>PluralFormat</code> for a given JDK locale.
+     * Creates a new cardinal-number <code>PluralFormat</code> for a given
+     * {@link java.util.Locale}.
      * @param locale the <code>PluralFormat</code> will be configured with
      *        rules for this locale. This locale will also be used for standard
      *        number formatting.
@@ -256,7 +257,7 @@
 
     /**
      * Creates a new <code>PluralFormat</code> for the plural type.
-     * The standard number formatting will be done using the given JDK locale.
+     * The standard number formatting will be done using the given {@link java.util.Locale}.
      * @param locale the default number formatting will be done using this
      *        locale.
      * @param type The plural type (e.g., cardinal or ordinal).
diff --git a/android_icu4j/src/main/java/android/icu/text/PluralRules.java b/android_icu4j/src/main/java/android/icu/text/PluralRules.java
index 1a5020c..fbee492 100644
--- a/android_icu4j/src/main/java/android/icu/text/PluralRules.java
+++ b/android_icu4j/src/main/java/android/icu/text/PluralRules.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2007-2015, International Business Machines Corporation and
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -1868,14 +1868,14 @@
 
     /**
      * Provides access to the predefined cardinal-number <code>PluralRules</code> for a given
-     * JDK locale.
+     * {@link java.util.Locale}.
      * Same as forLocale(locale, PluralType.CARDINAL).
      *
      * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
      * For these predefined rules, see CLDR page at
      * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
      *
-     * @param locale The JDK locale for which a <code>PluralRules</code> object is
+     * @param locale The locale for which a <code>PluralRules</code> object is
      *   returned.
      * @return The predefined <code>PluralRules</code> object for this locale.
      *   If there's no predefined rules for this locale, the rules
@@ -1910,13 +1910,13 @@
 
     /**
      * Provides access to the predefined <code>PluralRules</code> for a given
-     * JDK locale and the plural type.
+     * {@link java.util.Locale} and the plural type.
      *
      * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
      * For these predefined rules, see CLDR page at
      * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
      *
-     * @param locale The JDK locale for which a <code>PluralRules</code> object is
+     * @param locale The locale for which a <code>PluralRules</code> object is
      *   returned.
      * @param type The plural type (e.g., cardinal or ordinal).
      * @return The predefined <code>PluralRules</code> object for this locale.
diff --git a/android_icu4j/src/main/java/android/icu/text/RelativeDateTimeFormatter.java b/android_icu4j/src/main/java/android/icu/text/RelativeDateTimeFormatter.java
index ed12766..1846e2c 100644
--- a/android_icu4j/src/main/java/android/icu/text/RelativeDateTimeFormatter.java
+++ b/android_icu4j/src/main/java/android/icu/text/RelativeDateTimeFormatter.java
@@ -272,9 +272,9 @@
     }
 
     /**
-     * Returns a RelativeDateTimeFormatter for a particular JDK locale.
+     * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale}.
      * 
-     * @param locale the JDK locale.
+     * @param locale the {@link java.util.Locale}.
      * @return An instance of RelativeDateTimeFormatter.
      */
     public static RelativeDateTimeFormatter getInstance(Locale locale) {
@@ -329,10 +329,10 @@
     }
 
     /**
-     * Returns a RelativeDateTimeFormatter for a particular JDK locale that uses a particular
-     * NumberFormat object.
+     * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale} that uses a
+     * particular NumberFormat object.
      * 
-     * @param locale the JDK locale
+     * @param locale the {@link java.util.Locale}
      * @param nf the number format object. It is defensively copied to ensure thread-safety
      * and immutability of this class. 
      * @return An instance of RelativeDateTimeFormatter.
diff --git a/android_icu4j/src/main/java/android/icu/text/SpoofChecker.java b/android_icu4j/src/main/java/android/icu/text/SpoofChecker.java
index e9bf482..4f22146 100644
--- a/android_icu4j/src/main/java/android/icu/text/SpoofChecker.java
+++ b/android_icu4j/src/main/java/android/icu/text/SpoofChecker.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  ***************************************************************************
- * Copyright (C) 2008-2015 International Business Machines Corporation
+ * Copyright (C) 2008-2016 International Business Machines Corporation
  * and others. All Rights Reserved.
  ***************************************************************************
  *
@@ -1454,8 +1454,8 @@
     }
 
     /**
-     * Get a set of JDK locales for the scripts that are acceptable in strings to be checked. If no limitations on scripts
-     * have been specified, an empty set will be returned.
+     * Get a set of {@link java.util.Locale} instances for the scripts that are acceptable in strings to be checked. If no
+     * limitations on scripts have been specified, an empty set will be returned.
      *
      * @return A set of locales corresponding to the acceptable scripts.
      */
diff --git a/android_icu4j/src/main/java/android/icu/text/TimeZoneFormat.java b/android_icu4j/src/main/java/android/icu/text/TimeZoneFormat.java
index 4cadd7a..3e3e52a 100644
--- a/android_icu4j/src/main/java/android/icu/text/TimeZoneFormat.java
+++ b/android_icu4j/src/main/java/android/icu/text/TimeZoneFormat.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2011-2015, International Business Machines Corporation and    *
+ * Copyright (C) 2011-2016, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -452,12 +452,13 @@
     }
 
     /**
-     * Returns a frozen instance of <code>TimeZoneFormat</code> for the given JDK locale.
+     * Returns a frozen instance of <code>TimeZoneFormat</code> for the given
+     * {@link java.text.Locale}.
      * <p><b>Note</b>: The instance returned by this method is frozen. If you want to
      * customize a TimeZoneFormat, you must use {@link #cloneAsThawed()} to get a
      * thawed copy first.
      * 
-     * @param locale the JDK locale.
+     * @param locale the {@link Locale}.
      * @return a frozen instance of <code>TimeZoneFormat</code> for the given locale.
      */
     public static TimeZoneFormat getInstance(Locale locale) {
diff --git a/android_icu4j/src/main/java/android/icu/text/TimeZoneNames.java b/android_icu4j/src/main/java/android/icu/text/TimeZoneNames.java
index 6bd1cb6..616a094 100644
--- a/android_icu4j/src/main/java/android/icu/text/TimeZoneNames.java
+++ b/android_icu4j/src/main/java/android/icu/text/TimeZoneNames.java
@@ -1,7 +1,7 @@
 /* GENERATED SOURCE. DO NOT MODIFY. */
 /*
  *******************************************************************************
- * Copyright (C) 2011-2015, International Business Machines Corporation and
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
  * others. All Rights Reserved.
  *******************************************************************************
  */
@@ -156,10 +156,11 @@
     }
 
     /**
-     * Returns an instance of <code>TimeZoneNames</code> for the specified JDK locale.
+     * Returns an instance of <code>TimeZoneNames</code> for the specified
+     * {@link java.util.Locale}.
      * 
      * @param locale
-     *            The JDK locale.
+     *            The {@link java.util.Locale}.
      * @return An instance of <code>TimeZoneDisplayNames</code>
      */
     public static TimeZoneNames getInstance(Locale locale) {
diff --git a/android_icu4j/src/main/java/android/icu/util/Currency.java b/android_icu4j/src/main/java/android/icu/util/Currency.java
index 25a718e..da544e0 100644
--- a/android_icu4j/src/main/java/android/icu/util/Currency.java
+++ b/android_icu4j/src/main/java/android/icu/util/Currency.java
@@ -184,10 +184,10 @@
 
     /**
      * Returns an array of Strings which contain the currency
-     * identifiers that are valid for the given JDK locale on the 
+     * identifiers that are valid for the given {@link java.util.Locale} on the
      * given date.  If there are no such identifiers, returns null.
      * Returned identifiers are in preference order.
-     * @param loc the JDK locale for which to retrieve currency codes.
+     * @param loc the {@link java.util.Locale} for which to retrieve currency codes.
      * @param d the date for which to retrieve currency codes for the given locale.
      * @return The array of ISO currency codes.
      */
@@ -572,7 +572,8 @@
      * If the resource data for the default locale contains no entry for this currency,
      * then the ISO 4217 code is returned.
      * <p>
-     * Note: This method was added for JDK compatibility support and equivalent to
+     * Note: This method is a convenience equivalent for
+     * {@link java.util.Currency#getDisplayName()} and is equivalent to
      * <code>getName(Locale.getDefault(), LONG_NAME, null)</code>.
      * 
      * @return The display name of this currency
@@ -588,8 +589,9 @@
      * If the resource data for the given locale contains no entry for this currency,
      * then the ISO 4217 code is returned.
      * <p>
-     * Note: This method was added for JDK compatibility support and equivalent to
-     * <code>getName(locale, LONG_NAME, null)</code>.
+     * Note: This method is a convenience equivalent for
+     * {@link java.util.Currency#getDisplayName(java.util.Locale)} and is equivalent
+     * to <code>getName(locale, LONG_NAME, null)</code>.
      * 
      * @param locale locale in which to display currency
      * @return The display name of this currency for the specified locale
diff --git a/android_icu4j/src/main/java/android/icu/util/TimeZone.java b/android_icu4j/src/main/java/android/icu/util/TimeZone.java
index 314907e..427f32b 100644
--- a/android_icu4j/src/main/java/android/icu/util/TimeZone.java
+++ b/android_icu4j/src/main/java/android/icu/util/TimeZone.java
@@ -124,8 +124,8 @@
      */
     public static final int TIMEZONE_ICU = 0;
     /**
-     * <strong>[icu]</strong> A time zone implementation type indicating JDK TimeZone used by
-     * <code>getTimeZone</code>, <code>setDefaultTimeZoneType</code>
+     * <strong>[icu]</strong> A time zone implementation type indicating the {@link java.util.TimeZone}
+     * used by <code>getTimeZone</code>, <code>setDefaultTimeZoneType</code>
      * and <code>getDefaultTimeZoneType</code>.
      * @hide unsupported on Android
      */
@@ -593,16 +593,16 @@
      * <p>The default implementation in this class returns <code>true</code> if {@link #useDaylightTime()}
      * or {@link #inDaylightTime(Date) inDaylightTime(new Date())} returns <code>true</code>.
      * <p>
-     * <strong>Note:</strong> This method was added for JDK compatibility support.
-     * The JDK's <code>useDaylightTime()</code> only checks the last known rule(s), therefore
-     * it may return false even the zone observes daylight saving time currently. JDK added
-     * <code>observesDaylightTime()</code> to resolve the issue. In ICU, {@link #useDaylightTime()}
-     * works differently. The ICU implementation checks if the zone uses daylight saving time
-     * in the current calendar year. Therefore, it will never return <code>false</code> if
-     * daylight saving time is currently used.
+     * <strong>Note:</strong> This method was added for {@link java.util.TimeZone} compatibility
+     * support. The {@link java.util.TimeZone#useDaylightTime()} method only checks the last known
+     * rule(s), therefore it may return false even the zone observes daylight saving time currently.
+     * {@link java.util.TimeZone} added <code>observesDaylightTime()</code> to resolve the issue.
+     * In ICU, {@link #useDaylightTime()} works differently. The ICU implementation checks if the
+     * zone uses daylight saving time in the current calendar year. Therefore, it will never return
+     * <code>false</code> if daylight saving time is currently used.
      * <p>
      * ICU's TimeZone subclass implementations override this method to support the same behavior
-     * with JDK's <code>observesDaylightSavingTime()</code>. Unlike {@link #useDaylightTime()},
+     * with {@link java.util.TimeZone#observesDaylightTime()}. Unlike {@link #useDaylightTime()},
      * the implementation does not take past daylight saving time into account, so
      * that this method may return <code>false</code> even when {@link #useDaylightTime()} returns
      * <code>true</code>.
diff --git a/android_icu4j/src/main/java/android/icu/util/ULocale.java b/android_icu4j/src/main/java/android/icu/util/ULocale.java
index 7a943b9..883b70a 100644
--- a/android_icu4j/src/main/java/android/icu/util/ULocale.java
+++ b/android_icu4j/src/main/java/android/icu/util/ULocale.java
@@ -385,7 +385,7 @@
 
     /**
      * Construct a ULocale object from a {@link java.util.Locale}.
-     * @param loc a JDK locale
+     * @param loc a {@link java.util.Locale}
      */
     private ULocale(Locale loc) {
         this.localeID = getName(forLocale(loc).toString());
@@ -395,7 +395,7 @@
     /**
      * <strong>[icu]</strong> Returns a ULocale object for a {@link java.util.Locale}.
      * The ULocale is canonicalized.
-     * @param loc a JDK locale
+     * @param loc a {@link java.util.Locale}
      */
     public static ULocale forLocale(Locale loc) {
         if (loc == null) {
@@ -499,7 +499,7 @@
 
     /**
      * <strong>[icu]</strong> Converts this ULocale object to a {@link java.util.Locale}.
-     * @return a JDK locale that either exactly represents this object
+     * @return a {@link java.util.Locale} that either exactly represents this object
      * or is the closest approximation.
      */
     public Locale toLocale() {
