diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java
index 24ccb9b..96a0552 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java
@@ -560,6 +560,7 @@
         1912,    7, 30,     // Taisho
         1926,   12, 25,     // Showa
         1989,    1,  8,     // Heisei
+        2019,    5,  1,     // Reiwa
     };
 
     //-------------------------------------------------------------------------
@@ -576,25 +577,25 @@
      * Constant for the era starting on Sept. 8, 1868 AD.
      * @stable  ICU 2.8 
      */
-    static public final int MEIJI = CURRENT_ERA - 3;
+    static public final int MEIJI = CURRENT_ERA - 4;
 
     /** 
      * Constant for the era starting on July 30, 1912 AD. 
      * @stable ICU 2.8 
      */
-    static public final int TAISHO = CURRENT_ERA - 2;
+    static public final int TAISHO = CURRENT_ERA - 3;
     
     /** 
      * Constant for the era starting on Dec. 25, 1926 AD. 
      * @stable ICU 2.8 
      */
-    static public final int SHOWA = CURRENT_ERA - 1;
+    static public final int SHOWA = CURRENT_ERA - 2;
 
     /** 
      * Constant for the era starting on Jan. 7, 1989 AD. 
      * @stable ICU 2.8 
      */
-    static public final int HEISEI = CURRENT_ERA;
+    static public final int HEISEI = CURRENT_ERA - 1;
 
     /**
      * Override GregorianCalendar.  We should really handle YEAR_WOY and
diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar
index 02c965d..3d31429 100755
--- a/icu4j/main/shared/data/icudata.jar
+++ b/icu4j/main/shared/data/icudata.jar
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:c6dfb005d2ad7f4272663dbdc3b3ffc6210a8941e34cd245dfcd53171ea227dd
-size 9758191
+oid sha256:a648bcbbe9f0fe0f4200fdbaaa1b8e1774f4b93d44a9b8fff0fa17ac47aa46e2
+size 9758216
diff --git a/icu4j/main/shared/data/testdata.jar b/icu4j/main/shared/data/testdata.jar
index 2305640..6116589 100755
--- a/icu4j/main/shared/data/testdata.jar
+++ b/icu4j/main/shared/data/testdata.jar
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:bf6180a3cd404399287e993a5c2a46c63b8b2817dcfa88a2b8813d23a4247d98
-size 723668
+oid sha256:dfe9de2f2677b6b6df96de5fd715dbc0a7d304ddf26b3b6d41078e183528cc4e
+size 723653
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java
index cca9cdf..ce3fee7 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java
@@ -148,9 +148,9 @@
         Calendar cal = new JapaneseCalendar(loc);
         DateFormat enjformat = cal.getDateTimeFormat(0,0,new ULocale("en_JP@calendar=japanese"));
         DateFormat format = cal.getDateTimeFormat(0,0,loc);
-        ((SimpleDateFormat)format).applyPattern("y.M.d");  // Note: just 'y' doesn't work here.
+        ((SimpleDateFormat)format).applyPattern("y/M/d");  // Note: just 'y' doesn't work here.
         ParsePosition pos = new ParsePosition(0);
-        Date aDate = format.parse("1.1.9", pos); // after the start of heisei accession.  Jan 1, 1H wouldn't work  because it is actually showa 64
+        Date aDate = format.parse("1/5/9", pos); // after the start of Reiwa accession.  Jan 1, 1R wouldn't work  because it is actually Heisei 31
         String inEn = enjformat.format(aDate);
 
         cal.clear();
@@ -159,7 +159,7 @@
         int gotEra = cal.get(Calendar.ERA);
         
         int expectYear = 1;
-        int expectEra = JapaneseCalendar.CURRENT_ERA;
+        int expectEra = JapaneseCalendar.CURRENT_ERA;   // Reiwa
         
         if((gotYear != expectYear) || (gotEra != expectEra)) {
             errln("Expected year " + expectYear + ", era " + expectEra +", but got year " + gotYear + " and era " + gotEra + ", == " + inEn);
@@ -167,7 +167,7 @@
             logln("Got year " + gotYear + " and era " + gotEra + ", == " + inEn);
         }
 
-        // Test parse with missing era (should default to current era, heisei)
+        // Test parse with missing era (should default to current era)
         // Test parse with incomplete information
         logln("Testing parse w/ just year...");
         Calendar cal2 = new JapaneseCalendar(loc);
@@ -191,7 +191,7 @@
         gotYear = cal2.get(Calendar.YEAR);
         gotEra = cal2.get(Calendar.ERA);
         expectYear = 1;
-        expectEra = JapaneseCalendar.CURRENT_ERA;
+        expectEra = JapaneseCalendar.CURRENT_ERA;   // Reiwa
         if((gotYear != 1) || (gotEra != expectEra)) {
             errln("parse "+ samplestr + " of 'y' as Japanese Calendar, expected year " + expectYear + 
                 " and era " + expectEra + ", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")");
@@ -370,5 +370,30 @@
         doLimitsTest(jcal, null, cal.getTime());
         doTheoreticalLimitsTest(jcal, true);
     }
+
+    public void TestHeiseiToReiwa() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(2019, Calendar.APRIL, 29);
+
+        DateFormat jfmt = DateFormat.getDateInstance(DateFormat.LONG, new ULocale("ja@calendar=japanese"));
+
+        final String[] EXPECTED_FORMAT = {
+                "\u5E73\u621031\u5E744\u670829\u65E5",  // Heisei 31 April 29
+                "\u5E73\u621031\u5E744\u670830\u65E5",  // Heisei 31 April 30
+                "\u4EE4\u548C1\u5E745\u67081\u65E5",    // Reiwa 1 May 1
+                "\u4EE4\u548C1\u5E745\u67082\u65E5",    // Reiwa 1 May 2
+        };
+
+        for (int i = 0; i < EXPECTED_FORMAT.length; i++) {
+            Date d = cal.getTime();
+            String dateStr = jfmt.format(d);
+            if (!EXPECTED_FORMAT[i].equals(dateStr)) {
+                errln("Formatting year:" + cal.get(Calendar.YEAR) + " month:" + (cal.get(Calendar.MONTH) + 1)
+                        + " day:" + cal.get(Calendar.DATE) + " - expected: " + EXPECTED_FORMAT[i]
+                        + " / actual: " + dateStr);
+            }
+            cal.add(Calendar.DATE, 1);
+        }
+    }
 }
 
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java
index d06550d..9831ff6 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java
@@ -1,4 +1,4 @@
-/** Copyright (C) 2007-2012, International Business Machines Corporation and Others. All Rights Reserved. **/
+/** Copyright (C) 2007-2019, International Business Machines Corporation and Others. All Rights Reserved. **/
 
 /* NOTE: this file is AUTOMATICALLY GENERATED by gentest.
  * See: {ICU4C}/source/data/icu4j-readme.txt for more information. 
@@ -7,7 +7,7 @@
 package com.ibm.icu.dev.test.util;
 
 public class DebugUtilitiesData extends Object {
-    public static final String ICU4C_VERSION="50.1.1";
+    public static final String ICU4C_VERSION="50.1.2";
     public static final int UDebugEnumType = 0;
     public static final int UCalendarDateFields = 1;
     public static final int UCalendarMonths = 2;
