diff --git a/src/com/ibm/icu/dev/test/serializable/SerializableTest.java b/src/com/ibm/icu/dev/test/serializable/SerializableTest.java
index de24d50..763648c 100644
--- a/src/com/ibm/icu/dev/test/serializable/SerializableTest.java
+++ b/src/com/ibm/icu/dev/test/serializable/SerializableTest.java
@@ -1,6 +1,6 @@
 /*
  *******************************************************************************
- * Copyright (C) 1996-2008, International Business Machines Corporation and    *
+ * Copyright (C) 1996-2011, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  *
@@ -8,6 +8,7 @@
 
 package com.ibm.icu.dev.test.serializable;
 
+import java.util.Date;
 import java.util.Locale;
 import java.util.HashMap;
 
@@ -19,7 +20,9 @@
 import com.ibm.icu.impl.TimeZoneAdapter;
 import com.ibm.icu.math.BigDecimal;
 import com.ibm.icu.math.MathContext;
+import com.ibm.icu.util.Calendar;
 import com.ibm.icu.util.Currency;
+import com.ibm.icu.util.GregorianCalendar;
 import com.ibm.icu.util.SimpleTimeZone;
 import com.ibm.icu.util.TimeZone;
 import com.ibm.icu.util.ULocale;
@@ -300,7 +303,22 @@
             "Europe/Amsterdam", "Europe/Athens", "Europe/Berlin", "Europe/London", "Europe/Malta", "Europe/Moscow",
             "Europe/Paris", "Europe/Rome"
         };
-        
+
+        long sampleTimes[] = {
+            1136073600000L, // 20060101T000000Z
+            1138752000000L, // 20060201T000000Z
+            1141171200000L, // 20060301T000000Z
+            1143849600000L, // 20060401T000000Z
+            1146441600000L, // 20060501T000000Z
+            1149120000000L, // 20060601T000000Z
+            1151712000000L, // 20060701T000000Z
+            1154390400000L, // 20060801T000000Z
+            1157068800000L, // 20060901T000000Z
+            1159660800000L, // 20061001T000000Z
+            1162339200000L, // 20061101T000000Z
+            1164931200000L, // 20061201T000000Z
+        };
+
         public Object[] getTestObjects()
         {
             TimeZoneAdapter timeZones[] = new TimeZoneAdapter[zoneIDs.length];
@@ -315,14 +333,32 @@
         
         public boolean hasSameBehavior(Object a, Object b)
         {
+            GregorianCalendar cal = new GregorianCalendar();
             TimeZoneAdapter tza_a = (TimeZoneAdapter) a;
             TimeZoneAdapter tza_b = (TimeZoneAdapter) b;
-
-            if (!tza_a.getID().equals(tza_b.getID())
-                || tza_a.getRawOffset() != tza_b.getRawOffset()) {
-                return false;
+            
+            int a_offset, b_offset;
+            boolean a_dst, b_dst;
+            boolean bSame = true;
+            for (int i = 0; i < sampleTimes.length; i++) {
+                cal.setTimeInMillis(sampleTimes[i]);
+                int era = cal.get(Calendar.ERA);
+                int year = cal.get(Calendar.YEAR);
+                int month = cal.get(Calendar.MONTH);
+                int day = cal.get(Calendar.DAY_OF_MONTH);
+                int dow = cal.get(Calendar.DAY_OF_WEEK);
+                int mid = cal.get(Calendar.MILLISECONDS_IN_DAY);
+                a_offset = tza_a.getOffset(era, year, month, day, dow, mid);
+                b_offset = tza_b.getOffset(era, year, month, day, dow, mid);
+                Date d = new Date(sampleTimes[i]);
+                a_dst = tza_a.inDaylightTime(d);
+                b_dst = tza_b.inDaylightTime(d);
+                if (a_offset != b_offset || a_dst != b_dst) {
+                    bSame = false;
+                    break;
+                }
             }
-            return true;
+            return bSame;
         }
     }
     
diff --git a/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java b/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
index 21acffe..39f72bf 100755
--- a/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
+++ b/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
@@ -1,6 +1,6 @@
 /**
  *******************************************************************************
- * Copyright (C) 2000-2008, International Business Machines Corporation and    *
+ * Copyright (C) 2000-2011, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -102,7 +102,7 @@
     public void TestShortZoneIDs() throws Exception {
 
         ZoneDescriptor[] JDK_116_REFERENCE_LIST = {
-            new ZoneDescriptor("MIT", -660, false),
+            new ZoneDescriptor("MIT", -660, true), // as of 2011n
             new ZoneDescriptor("HST", -600, false),
             new ZoneDescriptor("AST", -540, true),
             new ZoneDescriptor("PST", -480, true),
@@ -113,7 +113,7 @@
             new ZoneDescriptor("EST", -300, false),// updated Aug 2003 aliu
             new ZoneDescriptor("PRT", -240, false),
             new ZoneDescriptor("CNT", -210, true),
-            new ZoneDescriptor("AGT", -180, true), // updated by tzdata 2007k
+            new ZoneDescriptor("AGT", -180, false), // as of 2011n
             new ZoneDescriptor("BET", -180, true),
             // new ZoneDescriptor("CAT", -60, false), // Wrong:
             // As of bug 4130885, fix CAT (Central Africa)
@@ -121,7 +121,7 @@
             new ZoneDescriptor("GMT", 0, false),
             new ZoneDescriptor("UTC", 0, false),
             new ZoneDescriptor("ECT", 60, true),
-            new ZoneDescriptor("ART", 120, true),
+            new ZoneDescriptor("ART", 120, false), // as of 2011n
             new ZoneDescriptor("EET", 120, true),
             new ZoneDescriptor("EAT", 180, false),
             // new ZoneDescriptor("MET", 210, true),
diff --git a/src/com/ibm/icu/impl/data/icudata.jar b/src/com/ibm/icu/impl/data/icudata.jar
index 3683ea8..bb2774a 100644
--- a/src/com/ibm/icu/impl/data/icudata.jar
+++ b/src/com/ibm/icu/impl/data/icudata.jar
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:d7975fc0d1d21388ccf87efc5eb2979f65249e360a3876a22df77205060c8aa5
-size 2093385
+oid sha256:513c887c4cb2353823f4b3fc8f88b5c6af38f22dffd5e5d89a15855fd03d2580
+size 2097197
