diff --git a/build.properties b/build.properties
index 8e8b85e..0deb785 100644
--- a/build.properties
+++ b/build.properties
@@ -27,4 +27,6 @@
 default.target.rt.version=J2SE15
 
 icu4j.plugin.impl.version.string=4.0.1
-copyright.eclipse=Licensed Materials - Property of IBM \n (C) Copyright IBM Corp. 2000, 2009. All Rights Reserved. \n IBM is a registered trademark of IBM Corp.
\ No newline at end of file
+copyright.eclipse=Licensed Materials - Property of IBM \n (C) Copyright IBM Corp. 2000, 2009. All Rights Reserved. \n IBM is a registered trademark of IBM Corp.
+
+icu4j.eclipse.build.version.string=4.0.1.v20090822
diff --git a/readme.html b/readme.html
index 8fd7e5d..119cfd2 100644
--- a/readme.html
+++ b/readme.html
@@ -13,10 +13,10 @@
 <body style="background-color: rgb(255, 255, 255);" lang="EN-US"
  link="#0000ff" vlink="#800080">
 <h2>International Components for Unicode for Java (ICU4J)</h2>
-<h3>Read Me for ICU4J 4.0.1</h3>
+<h3>Read Me for ICU4J 4.0.1.1</h3>
 <hr size="2" width="100%">
 <p><b>Release Date</b><br>
-January 9, 2009<br>
+August 26, 2009<br>
 </p>
 <!-- <p><b>Note:</b> This is major release of ICU4J.  It contains bug fixes
 and adds implementations of inherited API and introduces new API
@@ -176,6 +176,20 @@
 </ul>
 </p>
 
+<h4 class="doc">4.0.1.1 (August 26, 2009)</h4>
+<p><b>Time zone data update</b></p>
+<p>ICU4J 4.0.1.1 updates the time zone data to version 2009l
+from the Olson tz database.</p>
+
+<p><b>Bug fixes</b></p>
+<p>This release contains following bug fixes (not a complete list)
+<ul>
+<li><a href="http://bugs.icu-project.org/trac/ticket/6921">#6921</a> Performance degration in RuleBasedCollator</li>
+<li><a href="http://bugs.icu-project.org/trac/ticket/7014">#7014</a> TimeZone.getTimeZone("Asia/Amman") returns GMT with tzdata 2009i</li>
+</ul>
+</p>
+
+
 <h3 class="doc"><a name="license"></a>License Information</h3>
 <p>
 The ICU projects (ICU4C and ICU4J) use the X license. The X
diff --git a/src/com/ibm/icu/dev/eclipse/misc/about_icu.html b/src/com/ibm/icu/dev/eclipse/misc/about_icu.html
index cddd060..78d44ec 100644
--- a/src/com/ibm/icu/dev/eclipse/misc/about_icu.html
+++ b/src/com/ibm/icu/dev/eclipse/misc/about_icu.html
@@ -8,7 +8,7 @@
 <body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>July 2, 2008</p>	
+<p>August 22, 2009</p>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
@@ -31,13 +31,13 @@
 		for informational purposes only, and you should look to the Redistributor's license for 
 		terms and conditions of use.</p>
 
-		<p><strong>ICU4J 4.0</strong> <br/><br/>
+		<p><strong>ICU4J 4.0.1.1</strong> <br/><br/>
 		The plug-in includes software (&quot;ICU4J&quot;) developed by International Business Machines
 		Corporation and others.
 		<br/><br/>
 		ICU4J is:
 		<blockquote>
-		Copyright (c) 1995-2008 International Business Machines Corporation and others<br/>
+		Copyright (c) 1995-2009 International Business Machines Corporation and others<br/>
 		All rights reserved. 
 		</blockquote>
 		<p>
diff --git a/src/com/ibm/icu/dev/eclipse/misc/about_icu_base.html b/src/com/ibm/icu/dev/eclipse/misc/about_icu_base.html
index d2703b8..d0b9ddc 100644
--- a/src/com/ibm/icu/dev/eclipse/misc/about_icu_base.html
+++ b/src/com/ibm/icu/dev/eclipse/misc/about_icu_base.html
@@ -8,7 +8,7 @@
 <body lang="EN-US">
 <h2>About This Content</h2>
  
-<p>January 9, 2009</p>	
+<p>August 22, 2009</p>	
 <h3>License</h3>
 
 <p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
@@ -31,7 +31,7 @@
 		for informational purposes only, and you should look to the Redistributor's license for 
 		terms and conditions of use.</p>
 
-		<p><strong>ICU4J 4.0.1</strong> <br/><br/>
+		<p><strong>ICU4J 4.0.1.1</strong> <br/><br/>
 		The plug-in includes software (&quot;ICU4J&quot;) developed by International Business Machines
 		Corporation and others.
 		<br/><br/>
diff --git a/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java b/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
index 52497f5..b567ae2 100644
--- a/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
+++ b/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
@@ -288,6 +288,8 @@
                     long t = START_TIME;
                     TimeZoneTransition tzt = null;
                     boolean middle = true;
+                    boolean isJdkTimeZone = (TimeZone.getDefaultTimeZoneType() == TimeZone.TIMEZONE_JDK);
+testTransitions:
                     while (t < END_TIME) {
                         if (tzt == null) {
                             testTimes[0] = t;
@@ -347,10 +349,24 @@
                             }
                             times[patidx] += System.currentTimeMillis() - timer;
                         }
+
+                        long tmpt = t;
+                        while (tmpt < END_TIME) {
+                            tzt = btz.getNextTransition(tmpt, false);
+                            if (tzt == null) {
+                                break testTransitions;
+                            }
+                            // JDK time zone data may be out of synch
+                            if (!isJdkTimeZone || (tz.getOffset(tzt.getTime() - 1) != tz.getOffset(tzt.getTime()))) {
+                                break;
+                            }
+                            tmpt = tzt.getTime();
+                        }
                         tzt = btz.getNextTransition(t, false);
                         if (tzt == null) {
-                            break;
+                            break testTransitions;
                         }
+
                         if (middle) {
                             // Test the date in the middle of two transitions.
                             t += (tzt.getTime() - t)/2;
diff --git a/src/com/ibm/icu/dev/test/timezone/TimeZoneRuleTest.java b/src/com/ibm/icu/dev/test/timezone/TimeZoneRuleTest.java
index 90eafd5..57956c2 100644
--- a/src/com/ibm/icu/dev/test/timezone/TimeZoneRuleTest.java
+++ b/src/com/ibm/icu/dev/test/timezone/TimeZoneRuleTest.java
@@ -1,6 +1,6 @@
 /*
  *******************************************************************************
- * Copyright (C) 2007-2008, International Business Machines Corporation and    *
+ * Copyright (C) 2007-2009, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -436,6 +436,10 @@
 
         String[] tzids = getTestZIDs();
         for (int i = 0; i < tzids.length; i++) {
+            if (tzids[i].equals("Asia/Amman")) {
+                logln("Skipping Asia/Amman - See ticket#7008");
+                continue;
+            }
             BasicTimeZone olsontz = (BasicTimeZone)TimeZone.getTimeZone(tzids[i], TimeZone.TIMEZONE_ICU);
             VTimeZone vtz_org = VTimeZone.create(tzids[i]);
             vtz_org.setTZURL("http://source.icu-project.org/timezone");
@@ -510,6 +514,10 @@
         for (int n = 0; n < startTimes.length; n++) {
             long startTime = startTimes[n];
             for (int i = 0; i < tzids.length; i++) {
+                if (tzids[i].equals("Asia/Amman")) {
+                    logln("Skipping Asia/Amman - See ticket#7008");
+                    continue;
+                }
                 BasicTimeZone olsontz = (BasicTimeZone)TimeZone.getTimeZone(tzids[i], TimeZone.TIMEZONE_ICU);
                 VTimeZone vtz_org = VTimeZone.create(tzids[i]);
                 VTimeZone vtz_new = null;
diff --git a/src/com/ibm/icu/impl/data/icudata.jar b/src/com/ibm/icu/impl/data/icudata.jar
index 4eca8be..3edd11a 100755
--- 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:db4aabb112055033df54d03aa57067666eee890b9edf8f5ee0ce18f9ad552320
-size 6592592
+oid sha256:35f0f5260cd2106cba3def34548bcae16176708403cfc39bc55007d00305fb4d
+size 6592531
