<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>Google Web Toolkit Release Notes</title>
      
      <style>
         body {
            background-color: white;
            color: black;
            font-family: Arial, sans-serif;
            font-size: small;
            margin: 20px;
         }

         li {
            margin-bottom: 0.5em;
         }

         li div {
            margin-top: 0.2em;
         }

         code {
            font-size: medium;
         }
      </style></head>

   <body>
      <h1 style="margin-bottom: 0;">Google Web Toolkit Release Notes</h1>
      <p style="margin-top: 5px; margin-left: 5px; font-weight: bold; font-size: 115%;">for all versions</b>
      <ul>
        <li><a href="#Release_Notes_Current">@GWT_VERSION@</a></li>
        <li><a href="#Release_Notes_2_0_2">2.0.2</a></li>
        <li><a href="#Release_Notes_2_0_1">2.0.1</a></li>
        <li><a href="#Release_Notes_2_0_0">2.0.0</a></li>        
        <li><a href="#Release_Notes_2_0_0_rc2">2.0.0-rc2</a></li>
        <li><a href="#Release_Notes_2_0_0_rc1">2.0.0-rc1</a></li>
        <li><a href="#Release_Notes_1_7_1">1.7.1</a></li>
        <li><a href="#Release_Notes_1_7_0">1.7.0</a></li>
        <li><a href="#Release_Notes_1_6_4">1.6.4</a></li>
        <li><a href="#Release_Notes_1_6_3">1.6.3</a></li>
        <li><a href="#Release_Notes_1_6_2">1.6.2</a></li>
        <li><a href="#Release_Notes_1_5_3">1.5.3</a></li>
        <li><a href="#Release_Notes_1_5_2">1.5.2</a></li>
        <li><a href="#Release_Notes_1_5_1">1.5.1 (RC2)</a></li>
        <li><a href="#Release_Notes_1_5_0">1.5.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_4_60">1.4.60</a></li>
        <li><a href="#Release_Notes_1_4_59">1.4.59 (RC2)</a></li>
        <li><a href="#Release_Notes_1_4_10">1.4.10 (RC)</a></li>
        <li><a href="#Release_Notes_1_3_3">1.3.3</a></li>
        <li><a href="#Release_Notes_1_3_1">1.3.1 (RC)</a></li>
        <li><a href="#Release_Notes_1_2_22">1.2.22</a></li>
        <li><a href="#Release_Notes_1_2_11">1.2.21 (RC)</a></li>
        <li><a href="#Release_Notes_1_1_10">1.1.10</a></li>
        <li><a href="#Release_Notes_1_1_0">1.1.0 (RC)</a></li>
        <li><a href="#Release_Notes_1_0_21">1.0.21</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_Current"></a>
      <h2>Release Notes for @GWT_VERSION@</h2>
      <p>
      This 2.0.3 release contains a fixes that was not included in the 2.0.2 release.
      </p>
      <h3>Noteworthy Fixed Issues</h3>
      <ul>
        <li>Using a PopupPanel in Internet Explorer without a history IFrame throws a NullPointerException (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4584">#4584</a>)</li>
        <li>Opera support for History is not working (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3956">#3956</a>)</li>
      </ul>

      <hr/>
      <a name="Release_Notes_2_0_2"></a>
      <h2>Release Notes for 2.0.2</h2>
      <p>
      This 2.0.2 release contains a fix that was not included in the 2.0.1 release.
      </p>
      <h3>Noteworthy Fixed Issues</h3>
      <ul>
        <li>Standard.css missing new layout styles (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4429">#4429</a>)</li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_2_0_1"></a>
      <h2>Release Notes for 2.0.1</h2>
      <p>
      This 2.0.1 release contains fixes for bugs found in the 2.0.0 release.
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li>
        Fixed a bug in how code generators collect method arguments from generated source, which impacted the Messages interfaces generated for UiBinder template files.
        In GWT 2.0, such argument names were incorrectly changed to ARGn. Most GWT applications will be unaffected, but external systems relying on these names will need to be updated.
        </li>
        <li>The development mode server will, by default, only bind to localhost which will break cross-machine debugging.  You can get the old behavior by specifying 
        <code>-bindAddress 0.0.0.0</code>.  Please see issue (#<a
        href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4322">4322</a>)
        for more details.  For webAppCreator-generated ant files, you can pass
        this with <tt>ant -Dgwt.args="-bindAddress 0.0.0.0" devmode</tt>.</li>
        <li>The CurrencyList/CurrencyData APIs are now public - if you were relying upon these classes in their non-public location, you should only need to update your 
        imports.</li>
      </ul>

      <h3>Noteworthy Fixed Issues</h3>
      <ul>
        <li>UiBinder Image class with resource attribute, removes styles on that image (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4415">#4415</a>)</li>
      	<li>Widgets lose focus if its placed on FocusPanel (Opera, Safari) (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1471">#1471</a>)</li>
      	<li>Remove method in SplitLayoutPanel is broken (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4217">#4217</a>)</li>
        <li>Splitter constructor hard codes the background color of the splitter to white (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4335">#4335</a>)</li>
        <li>Image should provide method to set alternative text (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4335">#4335</a>)</li>
        <li>CssResource cannot parse unescaped '-', '_' in class selectors and unknown at-rules (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3946">#3946</a>)</li>
        <li>Focusable implementation breaks ScrollPanels in Safari (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1313">#1313</a>)</li>
        <li>RequestBuilder restricted to GET and POST (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3388">#3388</a>)</li>
        <li>HTMLTable.Cell.getElement() calls getCellFormatter().getElement() with row and column swapped RequestBuilder restricted to GET and POST (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3757">#3757</a>)</li>
        <li>MenuBar steals focus when hovered (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3884">#3884</a>)</li>
        <li>TabLayoutPanel tabs don't line up properly on IE (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4447">#4447</a>)</li>
        <li>webAppCreator produces ant build files which support the gwt.args
        property for passing additional flags to the gwtc and devmode rules,
        such as <tt>ant -Dgwt.args="-style PRETTY" gwtc</tt>.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status:Fixed,FixedNotReleased%20milestone:2_0_1&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>
      <hr/>
      <a name="Release_Notes_2_0_0"></a>
      <h2>Release Notes for 2.0.0</h2>
      <p>
        This release includes some minor bug fixes found in the release candidate.
        See <a href="doc/latest/ReleaseNotes.html">What's New in GWT 2.0</a> plus the release notes
        for <a href="#Release_Notes_2_0_0_rc1">2.0.0-rc1</a> and <a href="#Release_Notes_2_0_0_rc2">2.0.0-rc2</a>
        for the full list of features and bugs fixes included in the GWT 2.0.0 release.
      </p>
      
      <hr/>
      <a name="Release_Notes_2_0_0_rc2"></a>
      <h2>Release Notes for 2.0.0-rc2</h2>
      <h3>New Features</h3> 
      <ul>
        <li>
          GWT 2.0 introduces a number of new panels, which together form a stable basis for fast and predictable
          application-level layout. The official doc is still in progress, but for an overview please see
          <a href="http://code.google.com/p/google-web-toolkit/wiki/LayoutDesign">Layout Design</a> on the wiki.
          The new set of panels includes
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/RootLayoutPanel.html">RootLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/LayoutPanel.html">LayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/DockLayoutPanel.html">DockLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/SplitLayoutPanel.html">SplitLayoutPanel</a>,
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/StackLayoutPanel.html">StackLayoutPanel</a>, and
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/TabLayoutPanel.html">TabLayoutPanel</a>.
        </li>
        <li>
            UiBinder now directly supports <code>LayoutPanel</code>. For example:<pre style="margin-left: 2em;">
&lt;g:LayoutPanel&gt;
  &lt;g:layer left='1em' width='20px'&gt;&lt;g:Label&gt;left-width&lt;/g:Label&gt;&lt;/g:Layer&gt;
  &lt;g:layer right='1em' width='20px'&gt;&lt;g:Label&gt;right-width&lt;/g:Label&gt;&lt;/g:Layer&gt;
  &lt;g:layer&gt;&lt;g:Label&gt;nada&lt;/g:Label&gt;&lt;/g:Layer&gt;
&lt;/g:LayoutPanel&gt;</pre>
        </li>
        <li>
          <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/Window.Navigator.html">Window.Navigator</a>
          now provides access to the native browser's navigator object.
        </li>
      </ul> 

      <h3>Breaking changes and known issues/bugs/problems</h3> 
      <ul>
        <li>
          Windows users who have previously installed the <i>Google Web Toolkit Developer Plugin for IE</i> will have
          to uninstall the old version. Use the following steps:
          <ol>
            <li>From the Windows "Start" Menu, open "Control Panel"</li>
            <li>Select "Add/Remove Programs"</li>
            <li>Select "Google Web Toolkit Developer Plugin for IE" then click "Uninstall"</li>
            <li>
              Run Internet Explorer and browse to
              <a href="http://gwt.google.com/samples/MissingPlugin">http://gwt.google.com/samples/MissingPlugin</a>
              to install the new  version of the plugin
            </li>
          </ol>
        </li>
        <li>
          Running a <code>GWTTestCase</code> as compiled script was previously done using <code>-Dgwt.args="-web"</code>.
          The <code>-web</code> argument is now deprecated in favor of <code>-prod</code>, consistent with the
          terminology change from <i>web mode</i> to <i>production mode</i>.
        </li>
        <li>
          The <code>-portHosted</code> command line argument for <code>DevMode</code> and <code>GWTTestCase</code>
          has changed to <code>-codeServerPort</code> to be consistent with the new term <i>code server</i>.
        </li>
        <li>
          The <code>junitCreator</code> command line utility has been removed.  Instead, the <code>webAppCreator</code>
          utility takes new argument: <code>-junit <i>&lt;path-to-junit-jar&gt;</i></code>, which incorporates the
          functionality previously in junitCreator and generates <code>ant test</code> targets.
        </li>
        <li>
          When running development mode on on Chrome, any JavaScript objects that pass into Java code will
          be assigned a new property <code>__gwt_ObjectId</code>.  This could break native code that looks
          iterates through the properties of such an object.  To work around this issue, see this
          <a href="http://code.google.com/p/google-web-toolkit/source/diff?old=4807&r=7063&format=side&path=/trunk/user/src/com/google/gwt/json/client/JSONObject.java">example</a>
          of our changes to <code>JSONObject</code> (scroll to the bottom). 
        </li>
        <li>
          Compile reports (formerly SOYC reports) are now generated with the <code>-compileReport</code> command
          line flag to <code>Compiler</code>.  The generated reports are now written to the private <i>extra</i>
          directory. If no <code>-extra</code> argument is specified, this directory defaults to <code>extras/</code>.
          This eliminates an unlikely security risk of accidentally deploying compile reports to a publicly accessible location. 
        </li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li>
          In UiBinder <code>&lt;ui:style&gt;</code> blocks, css class names may contain dashes.
        </li>
        <li>
          Non-Java method safe characters in inline <ui:style> class names doesn't work
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4052">#4052</a>)
        </li>
        <li>
          @external does not work reliably for inline styles in <ui:style>
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4053">#4053</a>)
        </li>
        <li>
          Various false alarm warnings about invalid JSNI references have been fixed.
        </li>
        <li>
          Various Swing UI improvements.
        </li>
        <li>
          RPC calls leaking memory for IE
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4133">#4133</a>)
        </li>
        <li>
          deRPC raise an Error 500 instead of propagating the correct RuntimeException in ProdMode
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4237">#4237</a>)
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_2_0_0_rc1"></a>
      <h2>Release Notes for 2.0.0-rc1</h2>
      <p>
        This release contains big changes to improve developer productivity, make cross-browser development easier, and produce faster web applications. 
      </p>
      
      <h3>Things that are changing with GWT 2.0 that might otherwise be confusing without explanation</h3> 
      <ul>
        <li>
          Terminology changes: We're going to start using the term "development mode" rather than the old term "hosted mode." 
          The term "hosted mode" was sometimes confusing to people, so we'll be using the more descriptive term "development mode" from now on. 
          For similar reasons, we'll be using the term "production mode" rather than "web mode" when referring to compiled script.
        </li>
        <li>
          Changes to the distribution: Note that there's only one download, and it's no longer platform-specific. 
          You download the same zip file for every development platform. 
          This is made possible by the new plugin approach used to implement development mode (see below). 
          The distribution file does not include the browser plugins themselves; those are downloaded separately the first time you use development mode in a browser that doesn't have the plugin installed. 
        </li>
      </ul>
      
      <h3>Major New Features</h3> 
      <ul>
        <li>
          In-Browser Development Mode: Prior to 2.0, GWT hosted mode provided a special-purpose "hosted browser" to debug your GWT code. 
          In 2.0, the web page being debugged is viewed within a regular-old browser. 
          Development mode is supported through the use of a native-code plugin called the <i>Google Web Toolkit Developer Plugin</i> for many popular browsers. 
          In other words, you can use development mode directly from Safari, Firefox, Internet Explorer, and Chrome. 
        </li>
        <li>
          Code Splitting: Developer-guided code splitting with <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/core/client/GWT.html#runAsync(com.google.gwt.core.client.RunAsyncCallback)">GWT.runAsync()</a> allows you to chunk your GWT code into multiple fragments for faster startup. 
          Imagine having to download a whole movie before being able to watch it. 
          Well, that's what you have to do with most Ajax apps these days -- download the whole thing before using it. 
          With code splitting, you can arrange to load just the minimum script needed to get the application running and the user interacting, while the rest of the app is downloaded as needed. 
        </li>
        <li>
          Declarative User Interface: GWT's <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/uibinder/client/UiBinder.html">UiBinder</a> now allows you to create  user interfaces mostly declaratively. 
          Previously, widgets had to be created and assembled programmatically, requiring lots of code. 
          Now, you can use XML to declare your UI, making the code more readable, easier to maintain, and faster to develop. 
          The Mail sample has been updated to show a practical example of using UiBinder.
        </li> 
        <li>
          Bundling of resources via <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/resources/client/ClientBundle.html">ClientBundle</a>.
          GWT introduced <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/ImageBundle.html">ImageBundle</a> in 1.4 to provide automatic spriting of images. 
          ClientBundle generalizes this technique, bringing the power of combining and optimizing resources into one download to things like text files, CSS, and XML. 
          This means fewer network round trips, which in turn can decrease application latency -- especially on mobile applications. 
        </li>
        <li>
          Using HtmlUnit for running test cases based on <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/junit/client/GWTTestCase.html">GWTTestCase</a>: 
          Prior to 2.0, <code>GWTTestCase</code> relied on SWT and native code versions of actual browsers to run unit tests.
          As a result, running unit tests required starting an actual browser.          
          As of 2.0, <code>GWTTestCase</code> no longer uses SWT or native code. 
          Instead, it uses <i>HtmlUnit</i> as the built-in browser. 
          Because HtmlUnit is written entirely in the Java language, there is no longer any native code involved in typical test-driven development.
          Debugging GWT Tests in development mode can be done entirely in a Java debugger.
        </li>
      </ul> 
    
      <h3>Breaking changes and known issues/bugs/problems</h3> 
      <ul>
        <li>
          Prior to 2.0, GWT tools such as the compiler were provide in a platform-specific jar (that is, with names like <code>gwt-dev-windows.jar</code>).
          As of 2.0, GWT tools are no longer platform specific and they reside in generically-named <code>gwt-dev.jar</code>.
          You are quite likely to have to update build scripts to remove the platform-specific suffix, but that's the extent of it. 
        </li>
        <li>
          The development mode entry point has changed a few times since GWT 1.0.
          It was originally called <code>GWTShell</code>, and in GWT 1.6 a replacement entry point called <code>HostedMode</code> was introduced.
          As of GWT 2.0, to reflect the new "development mode" terminology, the new entry point for development mode is <code>com.google.gwt.dev.DevMode</code>.
          Sorry to keep changing that on ya, but the good news is that the prior entry point still works. 
          But, to really stay current, we recommend you switch to the new <code>DevMode</code> entry point.
        </li>
        <li>
          Also due to the "development mode" terminology change, the name of the ant build target produced by <code>webAppCreator</code> has changed from <code>hosted</code> to <code>devmode</code>.
          In other words, to start development mode from the command-line, type <code>ant devmode</code>.
        </li>
        <li>
          HtmlUnit does not attempt to emulate authentic browser layout. 
          Consequently, tests that are sensitive to browser layout are very likely to fail.
          However, since <code>GWTTestCase</code> supports other methods of running tests, such as Selenium, that do support accurate layout testing, it can still make sense to keep layout-sensitive tests in the same test case as non-layout-sensitive tests.  
          If you want such tests to be ignored by HtmlUnit, simply annotate the test methods with <code>@DoNotRunWith({Platform.Htmlunit})</code>. 
        </li>
        <li>
          Versions of Google Plugin for Eclipse prior to 1.2 will only allow you to add GWT release directories that include a file with a name like <code>gwt-dev-windows.jar</code>. 
          You can fool it by sym linking or copying gwt-dev.jar to the appropriate name. 
        </li>
        <li>
          The way arguments are passed to the GWT testing infrastructure has been revamped. 
          There is now a consistent syntax to support arbitrary "run styles", including user-written, with no changes to GWT itself.
          For example, <code>-selenium FF3</code> has become <code>-runStyle selenium:FF3</code>. 
          This change likely does not affect typical test invocation scripts, but if you do use <code>-Dgwt.args</code> to pass arguments to <code>GWTTestCase</code>, be aware that you may need to make some changes.
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_7_1"></a>
      <h2>Release Notes for 1.7.1</h2>
      <p>
        This release adds support for Mac OS X version 10.6 (Snow Leopard) by allowing hosted mode to run with a 1.6 JRE in 32-bit
        mode (using the -d32 flag).
      </p>
      <h3>Fixed Issues</h3>
      <ul>
        <li>
          Allow hosted mode using a 1.6 JRE with the -d32 flag
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3843">#3843</a>, 
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3998">#3998</a>)
        </li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_7_0"></a>
      <h2>Release Notes for 1.7.0</h2>
      <p>
        This release adds explicit support for Internet Explorer 8, Firefox 3.5, and Safari 4 as well as a few high-priority bug fixes.
        In all other respects, it is very similar to GWT 1.6.
        Note, however, that this release is version 1.7.0 rather than version 1.6.5 to signify a potentially breaking change for libraries 
        that use deferred binding to specialize code based on user agent (see the next section for technical details).
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li>
          This release includes explicit support for IE8, which has some significant behavioral changes from prior versions of IE.
          These changes are great enough that the new value <code>ie8</code> has been added for the <code>user.agent</code> deferred binding client property.
          If you have deferred binding rules (i.e. <code>&lt;replace-with&gt;</code> or <code>&lt;generate-with&gt;</code>) or property providers 
          that are sensitive to <code>user.agent</code>, you may need to update them to account for the <code>ie8</code> value. 
          For more information, see the <a href="http://code.google.com/p/google-web-toolkit/wiki/IE8Support">technical notes</a>.
        </li>
      </ul>

      <h3>Fixed Issues</h3>
      <ul>
        <li>
          Updated GWT libraries to support IE8 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3558">#3558</a>, 
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3329">#3329</a>)
        </li>
        <li>Native exception in Node.is() (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3644">#3644</a>)</li>
        <li>
          Incorrect firing of two click events from CheckBox and a related issue 
          (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3508">#3508</a>,  
          <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3679">#3679</a>)
        </li>
        <li>Compiler java.lang.StackOverflowError if you don't use -Xss to set a stack size (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3510">#3510</a>)</li>
        <li>Mouse wheel in FF3 (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=2902">#2902</a>)</li>
        <li>GWT outputs expressions too long for WebKit (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3455">#3455</a>)</li>
        <li>java.sql.Date.valueOf error (<a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3731">#3731</a>)</li>
        <li>Added a workaround for Firefox 3.5 regression (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=497780">bugzilla #497780</a>)</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_4"></a>
      <h2>Release Notes for 1.6.4</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>The classpath in the scripts created by junitCreator was updated to refer to <code>/war/WEB-INF/classes</code> rather than <code>/bin</code>.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_3"></a>
      <h2>Release Notes for 1.6.3 (RC2)</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Various <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=3496">servlet classpath issues</a> introduced in 1.6.2 are resolved.</li>
        <li>JSP compilation should work out of the box in hosted mode.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_6_2"></a>
      <h2>Release Notes for 1.6.2 (RC)</h2>
      <p>
         Please see <a href="http://code.google.com/webtoolkit/doc/1.6/ReleaseNotes_1_6.html">What's new in GWT 1.6?</a> (online)
      </p>

      <hr/>
      <a name="Release_Notes_1_5_3"></a>
      <h2>Release Notes for 1.5.3</h2>
      <h3>Fixed Issues</h3>
      <ul>
        <li>RPC requests no longer fail on the embedded Android web browser</li>
        <li>Leaf <code>TreeItems</code> now line up with their non-leaf siblings</li>
        <li>Removing the last child node from a <code>TreeItem</code> no longer creates extra margins on the left</li>
        <li><code>HTTPRequest</code> no longer uses POST instead of GET on some IE installs because of incorrect XHR selection</li>
        <li>Compiler now uses a more reliable check to prevent methods with local variables from being inlined</li>
        <li><code>getAbsoluteTop()/Left()</code> can no longer return non-integral values</li>
        <li><code>Time.valueOf()</code> no longer fails to parse <code>"08:00:00"</code> or incorrectly accepts <code>"0xC:0xB:0xA"</code>.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_3&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_2"></a>
      <h2>Release Notes for 1.5.2</h2>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>History.onHistoryChanged()</code> has been added back (it was missing from 1.5 RC2) but is now deprecated.  Application startup should be handled by calling the new <code>History.fireCurrentHistoryState()</code>.</li>
        <li>Fields marked <code>final</code> in serializable types will now generate a warning; the fact that they were not being serialized was a source of confusion.  Mark such fields both <code>final</code> and <code>transient</code> to avoid the warning.</li>
        <li>Instance methods on overlay types cannot be accessed from JSNI.  (This used to work in hosted mode, but failed at runtime in web mode.)</li>
        <li>The hosted mode server no longer serves <code>hosted.html</code> from a module's public path; instead the file is read directly from the classpath.  This file is tightly coupled with the hosted mode implementation and was not meant to be user overridable.</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li><code>Collections.unmodifiableSortedSet()</code> and <code>Collections.unmodifiableSortedMap()</code> are now implemented.</li>
        <li>The new <code>Accessibility</code> class enables widget authors to add ARIA support to their widgets.  Many GWT widgets come with ARIA support by default.</li>
        <li>Improved exception stack traces in hosted mode when JSNI stack frames are present.</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Fixed the relationship between the coordinates returned by <code>Element.getAbsoluteLeft/Top()</code> and <code>Event.getClientX/Y()</code>.  <code>Document.getBodyOffsetLeft/Top()</code> can be used to account for the difference between these two coordinate systems.</li>
        <li><b>Ctrl-Z</b> should correctly perform an undo operation in RichTextArea on IE.</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%2CFixedNotReleased%20milestone%3A1_5_Final&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_1"></a>
      <h2>Release Notes for 1.5.1 (RC2)</h2>
      <h3>Support for Standards Mode</h3>
      <p>
      GWT 1.5 adds significantly more support for standards mode applications, but some widgets (especially those with table based layouts) may not behave as expected.  The low level standards mode bugs (such as with <code>getAbsoluteLeft/Top()</code>) have been addressed, but some of the constructs that our widgets rely on do not work in standards mode.  For example, you cannot set the height and width of a widget relative to its parent if its parent is a table cell, and <code>StackPanel</code> takes up much more vertical space than it should in Internet Explorer.  All of our samples have been reverted back to quirks mode, and the <code>applicationCreator</code> defaults to quirks mode when creating a new GWT app.
      </p>
      <p>
      You can still use standards mode for your GWT app, but please be aware that you may notice some layout issues.  If you are switching an app from quirks mode to standards mode, your CSS styles might be applied differently, which could also affect your application.  We will continue to address standards mode support in future GWT releases.
      </p>
      <h3>Potentially breaking changes and fixes</h3>
      <ul>
        <li><code>DOM.eventGetClientX/Y()</code> now takes into account the margin and border of the body element</li>
        <li>In hosted mode, all <code>DOM.eventGetXXX()</code> methods now assert that the requested attribute is reliable across all supported browsers.  This means that attempting to retrieve an attribute for an event that does not support that attribute will now throw an assertion error instead of returning a coerced value.  Most notably, the click event throws an assertion error if you attempt to get the mouse button that was clicked.</li>
        <li>The return value of <code>DOM.eventGetXXX()</code> methods are now coerced to 0 instead of -1 in web mode.  In hosted mode, an assertion error will be thrown if the attribute is not defined for the given event, as described in the previous bullet.</li>
        <li>Opera specific code has been upgraded to work with Opera 9.5, but may not work with older versions of Opera as we only support the most recent release.  Specifically, some widgets may not be able to receive focus.</li>
        <li>Calls to <code>History.newItem()</code> now trigger an <code>onHistoryChanged()</code> event synchronously instead of asynchronously</li>
      </ul>
      <h3>General Enhancements</h3>
      <ul>
        <li>Added support for the <code>contextmenu</code> event, which allows users to detect and override the browser's default context menu</li>
        <li>Improved performance of <code>NumberFormat</code></li>
        <li>Added support for altering the number of decimals in a currency in <code>NumberFormat</code></li>
        <li>Improved performance of Animations</li>
        <li>Improved the appearance of the default GWT style themes</li>
        <li>Improved the Showcase sample with more robust examples and more language translations</li>
        <li><code>FormPanel</code> can now wrap an existing form and still submit it to a hidden iframe</li>
      </ul>
      <h3>Fixed Issues</h3>
      <ul>
        <li><code>DOM.getAbsoluteLeft/Top()</code> and <code>DOM.eventGetClientX/Y()</code> no longer log an exception to the console in Firefox 3</li>
        <li>Fixed a memory leak in Internet Explorer</li>
        <li><code>DOM.getAbsoluteLeft/Top()</code> now takes into account the margin and border of the target element in Safari 3</li>
        <li>Fixed some bugs associated with history support</li>
      </ul>
      <p>
        See the GWT issue tracker for
        <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_5_RC2%20type%3Adefect&num=1000">
        the complete list of bug fixes and enhancements</a> in this release.
      </p>

      <hr/>
      <a name="Release_Notes_1_5_0"></a>
      <h2>Release Notes for 1.5.0 (RC)</h2>
      <p>
      This release candidate is, in a word, huge. Rather than including all the details here, please see <a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=WhatsNewinGWT15">What's New in GWT 1.5?</a> for full details. The main thing you'll want to know is that GWT 1.5 supports the Java 5 language features (generics, enumerated types, annotations, etc.). But check out the full notes, because there's a lot of great stuff!
      </p>

      <hr/>
      <a name="Release_Notes_1_4_60"></a>
      <h2>Release Notes for 1.4.60</h2>
      <p>
      This release has only a couple of minor changes from <a href="#Release_Notes_1_4_59">1.4.59</a>.
      </p>
      <ul>
        <li>Fixed a bug in the benchmarking that prevented source code from showing up in reports.</li>
        <li>Fixed a bug in the hosted mode servlet context emulation where getResource() would fail to
        find a file in a module's public path.</li>
        <li>Compiler output files of the form <code><i>module</i>.cache.html</code> used to contain html
        intended as a helpful note to a developer.  This message has now been removed because screen
        readers and some browsers would display this content to end users.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_4_59"></a>
      <h2>Release Notes for 1.4.59 (RC2)</h2>
      <p>
      This release includes numerous bugfixes and a few important changes.  If you are upgrading from GWT 1.3.3, you
      are strongly encouraged to read the <a href="#Release_Notes_1_4_10">release notes for 1.4.10</a> first.
      </p>

      <h3>New Features</h3>
      <ul>
        <li><a href="doc/html/com.google.gwt.user.client.DOM.html#eventGetCurrentEvent()">DOM.eventGetCurrentEvent()</a> now provides
        global access to the current Event object. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1309">#1309</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#setPopupPositionAndShow(com.google.gwt.user.client.ui.PopupPanel.PositionCallback)">PopupPanel.setPopupPositionAndShow(PopupCallback callback)</a>
        now provides now provides a simpler and bulletproof way to control the layout of popups. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1243">#1243</a>)</li>
        <li>The <a href="doc/html/com.google.gwt.user.client.ui.SuggestionHandler.html">SuggestionHandler</a> interface
        can be used to respond to the user selecting a suggstion in the 
        <a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1086">#1086</a>)</li>
        <li><a
          href="doc/html/java.util.Collection.html">Collection.toArray(Object[])</a>
        is now implemented. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=695">#695</a>)</li>
        <li>If you have it installed, <a href="http://gears.google.com/">Google Gears</a> is now accessible in hosted mode
        (Windows only). (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1252">#1252</a>)</li>
      </ul>

      <h3>General Changes</h3>
      <ul>
        <li>Startup is now faster and more reliable. In particular,
        <a href="doc/html/com.google.gwt.core.client.EntryPoint.html#onModuleLoad()">onModuleLoad()</a> is now called as soon
        as the DOM is ready, which will generally be before the page's body.onload() event is fired. This allows your application
        to startup before certain resources (such as images) are fully loaded.</li>
        <li>Linux hosted mode should be less crashy. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1281">#1281</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1358">#1358</a>)</li>
        <li>An important discussion of HTTP headers, caching, and HTTPS has been added to the 
        <a
          href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a>
        documentation. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1172">#1172</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.PopupPanel.html#center()">PopupPanel.center()</a> now causes
        the popup to be shown as well as centered. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1120">#1120</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> underwent number of
        bugfixes and should be stable now. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1130">#1130</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1214">#1214</a>, <a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1276">#1276</a>)</li>
        <li>New <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> warnings
          <ul>
            <li>Warn if a non-checked exception is used in the throws clause of a RemoteService method.</li>
            <li>Warn if no concrete, serializable subclasses can be found for a given type declared in a
            RemoteService interface.</li>
          </ul>
        </li>
        <li><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC</a> now generates a serialization
        policy file during compilation.  The serialization policy file contains a whitelist of allowed types which may be
        serialized.  Its name is a strong hash name followed by <code>.gwt.rpc</code>.  This file must be deployed to your web
        server as a public resource, accessible from a 
        <a href="doc/html/com.google.gwt.user.server.rpc.RemoteServiceServlet.html">RemoteServiceServlet</a>
        via <code>ServletContext.getResource()</code>.  If
        it is not deployed properly, RPC will run in 1.3.3 compatibility mode and refuse to serialize types implementing
        <a href="doc/html/java.io.Serializable.html">Serializable</a>. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1297">#1297</a>)</li>
        <li><a href="doc/html/com.google.gwt.user.client.ui.Panel.html#adopt(com.google.gwt.user.client.ui.Widget,%20com.google.gwt.user.client.Element)">Panel.adopt(Widget, Element)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#disown(com.google.gwt.user.client.ui.Widget)">Panel.disown(Widget)</a>
        have been deprecated.  If you have subclassed Panel, please carefully review the new documentation for
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#add(com.google.gwt.user.client.ui.Widget)">Panel.add(Widget)</a>
        and
        <a href="doc/html/com.google.gwt.user.client.ui.Panel.html#remove(com.google.gwt.user.client.ui.Widget)">Panel.remove(Widget)</a>
        for details on the correct way to add and remove Widgets from Panels.
        (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1121">#1121</a>)</li>
        <li>The benchmark viewer application is now faster, prettier, and a bit
        more user friendly.</li>
      </ul>

      <h3>Retractions from 1.4.10</h3>
      <ul>
        <li>Breaking changes to the semantics of
        <a href="doc/html/com.google.gwt.user.client.ui.UIObject.html#setStyleName(java.lang.String)">UIObject.setStyleName()</a>
        have been backed out.  All changes relative to 1.3.3 should now be
        backwards-compatible. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1079">#1079</a>)</li>
        <li>The linux distribution of 1.4.10 bundled Mozilla 1.7.13 instead of version 1.7.12, which is bundled in previous
        releases.  This change caused problems on some systems, so it's been
        reverted back to Mozilla 1.7.12 again. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1105">#1105</a>)</li>
        <li>Numerous RPC warnings were added in 1.4.10.  One of these warnings would be issued when a class containing
        native methods was found to be serializable.  This warning now only applies to automatically serialized types;
        types with custom serializers will no longer trigger this warning. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1161">#1161</a>)</li>
        <li>A change to RPC in 1.4.10 would cause an error to be issued if a serializable type had any subtypes that were
        not serializable.  This change caused code that worked in 1.3.3 to fail in 1.4.10.  In this release, the error has
        been downgraded to a warning. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1163">#1163</a>)</li>
        <li>A potentially breaking change to event bubbling in 1.4.10 has been
        backed out in favor of the 1.3.3 behavior. (<a
          href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1159">#1159</a>)</li>
      </ul>

      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC2%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_4_10"></a>
      <h2>Release Notes for 1.4.10 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.4, the first GWT release developed with major participation
      from GWT open source contributors.  It's been a long time coming, but we hope it's been worth the wait.
      In addition to tons of new features, optimizations, and performance enhancements, we've fixed more than
      150 bugs.  There are some important behavioral and potentially breaking API changes; if you read nothing
      else, please read these following sections!
      </p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Critical Changes to RPC</h4>
      In previous versions, the RPC subsystem was too lenient and failed to warn at compile time about potential (though unusual)
      edge cases that could in theory cause problems at runtime.  Beginning with version 1.4, the RPC subsystem emits additional warnings and errors to help 
      you identify error-prone constructs.  While this new behavior may seem annoying at first, rest assured that fixing your code to avoid RPC warnings will result in a smaller, faster, and more reliable app.
      <ul>
        <li><b>Bad code that happened to work before might not now</b><br/>
        Previously, if you declared one particular component type via @gwt.typeArgs at compile time, you could
        often get away with passing a different type at runtime.  For example, placing a Date in an
        ArrayList of String might work.  This type of code is less likely to work now and will likely become more
        strict in the future.  Bottom line: don't do this. Make sure collections only contain the declared item type (or subtypes thereof).
        </li>
        <li><b><a href="doc/html/java.io.Serializable.html">Serializable</a> equivalent to
        <a href="doc/html/com.google.gwt.user.client.rpc.IsSerializable.html">IsSerializable</a></b><br/>
        Although GWT's RPC mechanism doesn't purport to honor the semantics of Java serialization, by popular demand, Serializable and
        IsSerializable are now equivalent for the purposes of RPC.  This should improve server-side
        interoperability and remove much of the need for DTOs.
        </li>
        <li><b>Warn about missing gwt.typeArgs</b><br/>
        Every Collection or Map type should have an associated
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.SerializableTypes.html">gwt.typeArgs
        javadoc annotation</a>.  In the past, a missing @gwt.typeArgs would generally have no noticeable effect,
        because a bug in the RPC system would generate code for all available serializable types, even if they
        weren't used in your service interface.  Now that this bug has been fixed, you can achieve <b>significant</b>
        reduction in the size of your compiled output by fixing these warnings.
        </li>
        <li><b>Warn about serializable subclasses that violate the serialization restrictions</b><br/>
        An RPC warning is emitted for classes that are assignable to IsSerializable or Serializable but that lack a default
        constructor or contain fields which cannot be serialized. 
        It is important to resolve these warnings to avoid rare but confusing situations in which exceptions would be thrown at runtime.
        </li>
        <li><b>Warn about non-transient, final instance fields</b><br/>
        RPC has never actually serialized <code>final</code> instance fields, but now it explicitly warns about the existence of such fields unless they are also <code>transient</code>.  
        Thus, the warning can be addressed by making <code>final</code> instance fields <code>transient</code> as well, or it can be suppressed via a module property.
        </li>
        <li><b>Warn about local and non-static nested types that implement IsSerializable or Serializable</b><br/>
        RPC has never serialized these kinds of classes and will now generate a warning.
        </li>
        <li><b>Warn about native methods in serializable classes</b><br/>
        Attempting to serialize classes that contain <code>native</code> methods will cause UnsatisfiedLinkErrors if such methods are called in server-side code.
        </li>
      </ul>
      <h4>Module Script Tags</h4>
      <ul>
        <li>In previous versions of GWT, including external JavaScript files via a module &lt;script&gt; tag required a nested JavaScript expression &mdash; called a <i>script-ready function</i> &mdash; that would
        determine when the script had been successfully loaded.  Script load order is now handled automatically and
        these expressions are ignored.  A warning will be issued in hosted mode.  For reference, see
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">here</a>.
        </li>
      </ul>
      <h4>Additional Hosted Mode Checks Related to JSNI</h4>
      <ul>
        <li>Previously, when passing values from JavaScript into Java, hosted mode would silently coerce
        a JavaScript value of an incorrect type into the declared Java type.  Unfortunately, this would
        allow code to work in hosted mode that could fail in unexpected ways in web mode.  Hosted mode
        will now throw a HostedModeException if you try to pass an incompatible type.  See
        <a href="doc/html/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.Marshaling.html">here</a>
        for more details.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      This release also includes API changes that may require minor tweaks to existing code.  Any such changes
      that affect you should only take a few minutes to rectify.

      <h4><a href="doc/html/com.google.gwt.core.client.JavaScriptObject.html">JavaScriptObject</a></h4>
      <ul>
        <li>Although subclassing JavaScriptObject is not supported, some people do so anyway at their own risk :) 
        Please note that the existing (int) constructor has been removed in favor of a protected no-arg constructor.  Read the source code for
        <a href="doc/html/com.google.gwt.user.client.Element.html">Element</a> for an example of how JavaScriptObject must
        be subclassed now (that is, if subclassing were supported...which, of course, it isn't).
        </li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.DeferredCommand.html">DeferredCommand</a></h4>
      <ul>
        <li>The add() method is deprecated in favor of addCommand() in order to support the new
        <a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> interface.  Had we
        simply added a new method overload, existing code that passed in a null literal would have failed to compile.</li>
        <li>The new addPause() method should be used instead of add(null).</li>
      </ul>
      <h4><a href="doc/html/com.google.gwt.user.client.ui.UIObject.html">UIObject</a></h4>
      <ul>
        <li>The intended use and behavior of style names has been formalized in UIObject (and therefore in all widgets). All style
        names are now classified as "primary", "secondary", and "dependent" styles, the meanings of which are detailed in the UIObject
        documentation. The relevant method signatures remain unchanged (get/setStyleName(), add/removeStyleName()), and most
        widgets should be unaffected. One potentially breaking change, however, is that an exception is thrown if an attempt is made to remove the primary style name of a widget using removeStyleName().
        See the UIObject documentation for a full explanation.</li>
      </ul>

      <h3>New Features</h3>
      Here are a few of the coolest new features and enhancements in GWT 1.4.
      <ul>
        <li><b>Size and Speed Optimizations</b><ul>
           <li>New <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=610">size</a>
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=599">improvements</a> in the GWT compiler
           produce JavaScript that is 10-20% smaller; just recompile your app with 1.4.</li>
           <li>An enhanced startup sequence reduces the size of your module's startup script by 80%. More importantly, the
           new startup sequence removes an HTTP round-trip, making startup latency about 33% faster.</li>
           <li>The above optimizations combined with <a href="#ImageBundle">ImageBundle</a>, make it possible for GWT-based applications
           to load surprisingly quickly. To see for yourself, check out startup time of the
           <a href="samples/Mail/www/com.google.gwt.sample.mail.Mail/Mail.html">Mail</a> sample.</li>
        </ul></li>
        <li><b>Deployment Enhancements</b><ul>
           <li>GWT RPC is no longer tied to exclusively to servlets. New
           <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=389">modularized RPC</a> server code makes
           it easy to connect GWT RPC to your choice of Java back-ends.</li>
           <li>Adding GWT modules to an HTML page has been simplified. Instead of adding a &lt;meta name='gwt:module'&gt; and
           &lt;script src='gwt.js'&gt;, you just add a single script element for your module.</li>
           <li>Cross-site script inclusion is now supported. The compiler produces a "-xs" (meaning "cross-site") version of
           your module's startup script that can be included without being restricted by the same-origin policy. WARNING:
           including scripts from other sites that you don't fully trust is a
           <a href="http://groups.google.com/group/Google-Web-Toolkit/web/security-for-gwt-applications">big security risk</a>.</li>
        </ul></li>
        <li><b>Widget and Library Enhancements</b><ul>
           <li><a href="doc/html/com.google.gwt.user.client.ui.RichTextArea.html">RichTextArea</a> allows "drop in"
           functionality for rich text editing.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.SuggestBox.html">SuggestBox</a> makes it easy to add
           auto-complete functionality.</li>
           <li>Splitters! <a href="doc/html/com.google.gwt.user.client.ui.HorizontalSplitPanel.html">HorizontalSplitPanel</a>
           and <a href="doc/html/com.google.gwt.user.client.ui.VerticalSplitPanel.html">VerticalSplitPanel</a> enable you to
           resize portions of the user interface.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.PushButton.html">PushButton</a> and
           <a href="doc/html/com.google.gwt.user.client.ui.ToggleButton.html">ToggleButton</a> are easy-to-customize button
           widgets that can enhance the look-and-feel of your UI.</li>
           <li><a href="doc/html/com.google.gwt.user.client.ui.DisclosurePanel.html">DisclosurePanel</a> is a simple,
           nice-looking panel that lets users easily hide and show portions of your application UI.</li>
           <li><a href="doc/html/com.google.gwt.i18n.client.DateTimeFormat.html">DateTimeFormat</a> and
           <a href="doc/html/com.google.gwt.i18n.client.NumberFormat.html">NumberFormat</a> make it easy to format and parse
           dates, times, and numbers for users all over the world.</li>
           <li><a href="doc/html/com.google.gwt.user.client.IncrementalCommand.html">IncrementalCommand</a> helps you
           implement long-running tasks in your client code without triggering "slow script" warnings.</li>
           <li>A new <a href="http://docs.google.com/View?docid=d9s6nb7_1d723ft">benchmarking subsystem</a> integrates with
           JUnit to let you record and compare the speed of code snippets across multiple browsers and multiple parameter
           ranges. Benchmarking is a powerful way to identify bottlenecks and compare performance of alternative implementations.</li>
           <li>The oft-requested <a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=21">java.io.Serializable</a> is
           now included in the JRE emulation library and is synonymous with IsSerializable for the purpose of GWT RPC.</li>
           <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=844">Mouse wheel events</a> are now available
           on a variety of widgets.</li>
        </ul></li>
        <a name="ImageBundle"></a>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.ImageBundle.html">ImageBundle</a></b><ul>
           <li>ImageBundle is the single biggest have-to-see-it-to-believe-it feature in this release. Image bundles make it trivially
           easy to combine dozens of images into a single "image strip", collapsing what would have been dozens of HTTP requests into
           one: a single, permanently-cacheable image file.</li>
           <li>Image bundles manage everything for you automatically, from computing clipping rectangles to making transparent PNGs
           work in IE6. You can even choose to get the clipped image as an Image widget or as pure HTML for inclusion in a larger HTML
           template.</li>
           <li>In addition to enabling a blazing-fast startup, image bundles help make the UI look better during startup, too. Typical
           AJAX apps exhibit "bouncy relayout" as individual images are loaded one-at-a-time. Fixing this problem has historically
           required laboriously pre-initializing the width and height of each individual image ahead of time. Image bundles do the
           same thing automatically. The dimensions of each clipped image are computed at compile time while the bundled
           image file is being created. Voila! The result is a fast, non-ugly user startup experience that requires no extra work on
           the part of the GWT developer to keep up-to-date.</li>
           <li>See the <a href="doc/html/com.google.gwt.doc.DeveloperGuide.UserInterface.ImageBundles.html">doc section</a> for more
           details.</li>
        </ul></li>
      </ul>
      
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Aenhancement&num=1000">the
      complete list of enhancements</a> in this release.</p>
 
      <h3>Fixed Issues</h3>
      <p>
      See the GWT issue tracker for
      <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_4_RC%20type%3Adefect&num=1000">the
      complete list of bug fixes</a> in this release.</p>

      <hr/>
      <a name="Release_Notes_1_3_3"></a>
      <h2>Release Notes for 1.3.3</h2>
      <p>
      This version has only minor functional changes from 1.3.1, listed below.
      </p>

      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=319">Issue #319 - Calling native super method in implementation class results in infinite loop in web mode</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=496">Issue #496 - gwt.js in gwt-user.jar lacks Apache 2.0 license header</a></li>
        <li><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=497">Issue #497 - Unexpected internal compiler error - Analyzing permutation #1</a></li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_3_1"></a>
      <h2>Release Notes for 1.3.1 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.3, the first completely open source version of GWT. 
      This version has no new functionality, but we did make a lot of changes to get the source code and build scripts into presentable shape to prepare for ongoing open source development.
      Although the changes were relatively harmless -- formatting, sorting, more documentation, and a new build system -- there's always a small chance of problems, so we plan to call this a Release Candidate until we've convinced ourselves it's reliable.
      </p>

      <h3>Useful Links</h3>
      <ul>
        <li><b><a href="http://code.google.com/webtoolkit/makinggwtbetter.html">Making GWT Better</a></b>
        <br>This is our new GWT open source charter that describes how we plan to operate the project and how you can access the GWT source, compile it yourself, and contribute.</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list">The GWT Issue Tracker</a></b>
        <br>Please report any bugs in 1.3 RC that weren't in 1.2.22 in the GWT issue tracker. These would be likely related to the new build, and we want to know ASAP so we can fix them.</li>
        <li><b><a href="http://google-web-toolkit.googlecode.com/svn/">The GWT Subversion Repository</a></b>
        <br>Visit the online repository to browse the GWT source without a Subversion client.</li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_2_22"></a>
      <h2>Release Notes for 1.2.22</h2>
      <p>
      This is the official GWT 1.2 release, the follow up to the <a href="#Release_Notes_1_2_11">GWT 1.2 Release Candidate</a>.
      It includes all of the enhancements and bug fixes from GWT 1.2 RC as well as a few additional bug fixes that were reported against GWT 1.2 RC.</p>
      
      <h3>About OS X Hosted Mode Support</h3>
      GWT's hosted mode support is available only on OS X 1.4 (Tiger) or later.

      <h3>Useful Links</h3>
      <ul>
        
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_Final">Changes included in GWT 1.2 since the RC</a></b>
        <br>Also see the GWT Blog for a discussion of the <a href="http://googlewebtoolkit.blogspot.com/2006/11/wrapping-up-gwt-12-soon.html">noteworthy issues related to 1.2 RC</a></li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">New features and bug fixes in GWT 1.2 RC</a></b></li>
      </ul>
      
      <h3>Breaking API Changes</h3>
      There are no breaking changes to pre-1.2 APIs, but one method has been renamed in a class that was new in 1.2 RC.
      
      <h4>com.google.gwt.http.client.RequestBuilder</h4>
      The method <code>addHeader()</code> was renamed to <code>setHeader()</code> to more clearly reflect its intent. 
      You will only be affected by this change if you are using the new HTTP functionality available as of build 1.2.11.

      <hr/>
      <a name="Release_Notes_1_2_11"></a>
      <h2>Release Notes for 1.2.11 (RC)</h2>
      <p>
      This is the Release Candidate for GWT 1.2. 
      Between this build and the subsequent GWT 1.2 official release, changes are limited to issues unique to GWT 1.2 RC.
      
      <p>
      See the GWT issue tracker for <a href="http://code.google.com/p/google-web-toolkit/issues/list?can=1&q=status%3AFixed%20milestone%3A1_2_RC">the complete list of enhancements and bug fixes</a> in this release.</p>
      
      <h3>New Features</h3>
      <ul>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=91">Full support for OS X development</a></b>
        <br>Develop with GWT on OS X as easily as on Linux and Windows</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=93">Much faster hosted mode</a></b>
        <br>Hosted mode startup time has improved significantly, but, even better, refreshes are now lightning fast &mdash; even when your source changes</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=52">New HTTP request module</a></b>
        <br>The HTTP functionality that GWT users have been asking for (custom headers, status code, timeouts, and more), all wrapped up in an API that's easier to use than the JavaScript XMLHttpRequest object</li>
        <li><b><a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=10">Widgets in TreeItems</a></b>
        <br>Tree items can now contain arbitrary widgets...finally, you can easily create trees with checkboxes :-)</li>
      </ul>
      </p>
      
      <hr/>
      <a name="Release_Notes_1_1_10"></a>
      <h2>Release Notes for 1.1.10</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
        <li>Normalized behavior of GWT.getModuleBaseURL() with respect to hosted mode, web mode, RPC, and automatic resource injection
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6c2b23e90008b6b9">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1bb47f2cff671ef0">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3408c38464c57d4a">post #3</a>]
        </li>
        <li>Clarified message in Grid class related to row/column out of bounds error
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e5e130cba766d126">post</a>]
        </li>
        <li>i18nCreator fixed to work with Java 5.0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3b6452a068ebec63">post</a>]
        </li>
        <li>I18NSync (and therefore -i18n scripts) changed to replace dots with underscores when generating method names
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6a4e05beb094a5a2">post</a>]
        </li>
        <li>Additional character escaping in JSON strings
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/5f437d12ba83fff0">post</a>]
        </li>
        <li>Fixed bug calling toString() on nested JSON objects
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ee81aa5411dece71">post</a>]
        </li>
        <li>Fixed bug that caused the default font size of text in a FocusPanel to be zero
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2f5abf147c5550c4">post</a>]
        </li>
        <li>Fixed TabPanel.insert() with asHTML argument
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8f427dbe76ce2c49/">post</a>]
        </li>
        <li>Popups and DialogBoxes no longer underlap lists and combos in IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/6815ec29d2c404e2">post</a>]
        </li>
        <li>DialogBoxes can no longer be dragged beoynd the upper left corner of the browser window
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/28390f32c42f7940">post</a>]
        </li>
        <li>Buttons inside of FormPanels no longer automatically submit on Firefox; this is still a problem some versions of Safari and Opera
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/72bea3a6d4feeaeb">post</a>]
        </li>
        <li>TabPanel now sets the height of the internal DeckPanel to 100% to ensure all available space is used
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4cd09f04bc515696">post</a>]
        </li>
        <li>Fixed bug in Mozilla that was causing DialogBox.onKeyPressPreview() to see key as 0
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8147b4b219a8fbc7">post</a>]
        </li>
        <li>DockPanel no longer lays out with a DeferredCommand; this makes it possible to correctly measure the size of PopupPanel
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/7bbb89e4c97ae1e6">post</a>]
        </li>
        <li>SimplePanel is no longer abstract
        </li>
        <li>Double click now fires correctly on IE6
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2d16242dc7fb830f">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization errors or infinite loops with self-referential object graphs
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/2a8658e93e2a8de3">post</a>]
        </li>
        <li>Fixed RPC bug that caused deserialization to fail on character arrays containing null characters
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/f60f5d5552a3d26b">post</a>]
        </li>
        <li>Serializable classes whose superclass is serialized by a custom field serializer are now correctly deserialized on the server
        </li>
        <li>Fixed bug related to FocusPanel that sometimes manifested during RPC async responses
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/edd16ede4f891db8">post</a>]
        </li>
        <li>Fixed bug in JUnit assertEquals() for floating point values (delta was not honored correctly)
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b0e06cc253915b86">post</a>]
        </li>
        <li>Fixed internal compiler errors related to nested local subclasses, empty for loop expressions, and no-op unary plus operator.
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/d8ecf70acc4e5b0e">post #1</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4da8dcbab9479a80">post #2</a>,
         <a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/a9f17bf30d0116b">post #3</a>]
        </li>
        <li>Fixed infinite loop in Integer.toHexString()
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3f9c3f4df08fb523">post</a>]
        </li>
        <li>Compiler now handling filesystem symbolic links in project structure
        [<a href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/1597c73888d1acd9">post</a>]
        </li>
        <li>Fixed rare JVM crash in Windows hosted mode related to JSNI function pointers
        </li>
      </ul>
      
      <hr/>
      <a name="Release_Notes_1_1_0"></a>
      <h2>Release Notes for 1.1.0 (RC)</h2>
      <p/>
      <h3>New Features</h3>
      <ul>
        <li><b><a href="doc/html/com.google.gwt.user.client.ui.FileUpload.html">FileUpload widget</a></b><br>The much-requested file upload widget
        </li><li><b><a href="doc/html/com.google.gwt.user.client.ui.FormPanel.html">FormPanel widget</a></b><br>Easily submit traditional HTML forms from GWT apps
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html">RPC optimizations</a></b><br>Client and server performance improvements and a more compact wire format
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Fundamentals.Modules.AutomaticResourceInjection.html">Automatic Resource Injection</a></b><br>Modules can contain references to external JavaScript and CSS files, causing them to be automatically loaded when the module itself is loaded
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.Internationalization.html">Internationalization</a></b><br>Easily localize strings and formatted messages
        </li><li><b><a href="doc/html/com.google.gwt.xml.client.html">XML classes</a></b><br>An XML library based on the W3C DOM
        </li><li><b><a href="doc/html/com.google.gwt.json.client.html">JSON classes</a></b><br>JSON has moved into <code>gwt-user.jar</code>, and it's much faster than the sample that shipped with 1.0.21
        </li><li><b><a href="doc/html/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html">JUnit enhancements</a></b><br>Unit tests are much, much faster than in 1.0.21, easier to configure, and you can now test asynchronous things like RPCs and timers
        </li><li><b><a href="doc/javadoc/index.html">Javadoc</a></b><br>Now included for your convenience, with sample code fragments
        </li><li><b><code>gwt-servlet.jar</code></b><br>Although you should continue to build against <code>gwt-user.jar</code> as always, 
        you only need to deploy <code>gwt-servlet.jar</code> with your webapps; it contains the subset of <code>gwt-user.jar</code> you'll need to support RPC
      </li></ul>
         There are also a significant number of bug fixes from all the great feedback we've gotten from the developer forum. 
         Please see the <a href="#Release_Notes">additional release notes</a> for detailed information about other important changes in
         Google Web Toolkit since the previous release, including a few breaking API changes that we don't want to catch you off guard.
      </p>
      
      <h3>Fixed Issues</h3>
      <ul>
        <li><a href="http://code.google.com/webtoolkit/issues/4794724.html">Issue #4794724 - Servlet container problems due to gwt-user.jar including javax.servlet classes</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/1676686.html">Issue #1676686 - Hosted mode problems in Windows 2000</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6606675.html">Issue #6606675 - ListBox and Image widgets are missing CSS style names</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/5922226.html">Issue #5922226 - Casts from interface types to concrete class types can fail</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4137736.html">Issue #4137736 - Referencing an outer local from a field initializer causes NullPointerException</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/2518888.html">Issue #2518888 - Problem with "return" statements in constructors</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/9984353.html">Issue #9984353 - Hosted Mode server throws IllegalArgumentException when system is set to non-english locale</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/3733199.html">Issue #3733199 - Shrinking Grid via resizeRows() leads to inconsistent state</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/7659250.html">Issue #7659250 - Hosted mode on default Fedora Core 5 complains of missing libstdc++.so.5</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/6531240.html">Issue #6531240 - Empty if, while, do, and for statements cause Compiler Error</a></li>
        <li><a href="http://code.google.com/webtoolkit/issues/4927592.html">Issue #4927592 - Multiple initializations in for loop initializer causes internal compiler error.</a></li>
      </ul>

      <p>See the <a href="#Appendix">appendix of fixed issues</a> for the nitty-gritty list of things that we have fixed in this release, including smaller issues.</p>

      <h3>Behavioral Changes</h3>
      <p>Important changes in the behavior of existing GWT features.</p>
      <h4>Module Source and Public Paths</h4>
      <ul>
        <li>In previous versions of GWT, source and public path inclusions were based on physical
        directory structure; only files physically located with the module would be included. Going
        forward, source and public path inclusions are based on logical package structure. Once a package
        has been included, any files in that package become visible no matter where they are physically
        located.
        </li>
      </ul>
      <h4>JUnit Modules</h4>
      <ul>
        <li>GWT test modules (that is, modules intended to run GWTTestCase-derived JUnit test cases) no longer
        need to inherit the <code>com.google.gwt.junit.JUnit</code> module. Additionally, it is no longer an
        error to declare entry points within a test module (they will be ignored when running under JUnit).
        Most test cases can now simply use the existing application module, which should simplify test case
        configuration.
        </li>
      </ul>

      <h3>Breaking API Changes</h3>
      Based on user feedback, we've made a few API changes in this release that may require minor tweaks to your existing code when you upgrade.
      Any such changes that affect you should only take a few minutes to rectify.

      <h4>com.google.gwt.user.client.ui.HasWidgets</h4>
      <ul>
        <li>We've moved add(), remove(), and clear() into this interface, so that any widget that can contain other widgets will be bound to this contract.</li>
        <li>The add() method no longer returns a boolean.  If a panel either cannot add a child widget without extra arguments, or cannot accept further widgets, it will throw an exception.  This is in keeping with the fact that this is usually the result of an error in the code.</li>
        <li>Its iterator is now required to support the remove() method.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.Composite</h4>
      <ul>
        <li>Composites must now call initWidget() in their constructors, rather than setWidget().  This is more indicative of its actual purpose, and also serves to clear up any confusion with SimplePanel's setWidget() method.  Composite.setWidget() is now deprecated.</li>
      </ul>
      <h4>com.google.gwt.user.client.ui.SimplePanel and subclasses</h4>
      <ul>
        <li>
        We have added setWidget() to SimplePanel, which has more appropriate semantics for a panel that can contain only one child.  
        The add() method is still present through the HasWidgets interface, but will fail if a widget is already present.  
        This change is most likely to affect you if you use DialogBox or PopupPanel. To fix it, simply change your call to add() to setWidget() instead. 
        </li>
      </ul>
      <h4>com.google.gwt.user.client.Cookies</h4>
      <ul>
        <li>Cookies.getCookie() is now static, as it should have been from the beginning.  There is no need to instantiate this class now.</li>
        <li>You can now set cookies as well!</li>
      </ul>

      <a name="Appendix"></a>
      <h3>Appendix: Complete List of Fixed Issues</h3>

      <p>
        The list of issues below is a short synopsis of all of the major and minor issues fixed in this release.  
        See the <a href="http://code.google.com/webtoolkit/issues/">online GWT issues database</a> for the important common issues.</p>
      <ul>
        <li>String.matches(regex) should exist and doesn't</li>
        <li>Need a way to set individual List items selected/unselected (applies to multi-select listboxes)</li>
        <li>DOM needs setBooleanAttribute, getBooleanAttribute.</li>
        <li>HTMLTable.CellFormatter needs getStyleName() to match setStyleName().</li>
        <li>FlexTable's internal widget map does not correctly adjust for the user inserting rows and cells.<br></li>
        <li>Window.getTitle/setTitle should be static</li>
        <li># characters in filenames cause compilation to fail.</li>
        <li>DynaTable has incorrect HTML</li>
        <li>Change Timer API to use int not long</li>
        <li>In hosted mode JSNI, marshall Java longs as VT_R8 </li>
        <li>Popups are not always positioned properly on Safari.</li>
        <li>SWT source inclusion is wrong.</li>
        <li>Safari crashes on exit under some circumstances.</li>
        <li>TreeLogger throws away exception info in console mode.</li>
        <li>Window needs a private ctor</li>
        <li>Phone home version checking should actually compare ordering of version number</li>
        <li>Hosted Mode server throws IllegalArgumentException when system is set to non-english locale</li>
        <li>Trees have an unsightly 16-pixel left margin.</li>
        <li>SimplePanel.remove() broken.</li>
        <li>ScrollPanel doesn't implement SourcesScrollEvents.</li>
        <li>Make junit-web output to www dir</li>
        <li>Add "hidden" feature to ArgHandler system.</li>
        <li>JUnitShell could hang forever.</li>
        <li>1.5 VM fails to run junit because StackTraceElement 0-arg constructor disappeared.</li>
        <li>Panel and ComplexPanel still have methods from old version of HasWidgets.</li>
        <li>Nested tables can fire events from the wrong one.</li>
        <li>Make sure JSNI refs to functions can be passed around and used as real function pointers.</li>
        <li>AbsolutePanel doesn't position its children consistently.</li>
        <li>JSONParser does not handle generic JSONValues in the encoded json string correctly; always assumes its a JSONObject</li>
        <li>Remove -notHeadless from GWTShell (only applies to GWTUnitTestShell)</li>
        <li>Number of results returned from split() differs in Java/JavaScript (see description)</li>
        <li>Helper scripts don't work for base package.</li>
        <li>Grid fails to update row count when removing.</li>
        <li>JSONString, toString does not enclose its characters in double quotes</li>
        <li>Selection issue when removing widgets from TabPanel.</li>
        <li>JSONParser always assumes root type is JSONObject</li>
        <li>ClassSourceFileComposer should not handle Class objects.</li>
        <li>Modules cannot supercede files from inherited modules</li>
        <li>Simple &amp; ComplexPanel shouldn't implement getChildCount(), getChild(), etc.</li>
        <li>Negative byte values passed into JavaScript become positive</li>
        <li>The rpc servlet needs a thread-local HttpServletResponse to match the thread-local request.</li>
        <li>Appending char to a String behaves incorrectly.</li>
        <li>Remove STL dependency from gwt-ll</li>
        <li>Using xhtml doctype causes popups to be misplaced on Mozilla browsers.</li>
        <li>JsniInjector fails to match lines when there are Javadoc comments.</li>
        <li>Add whitelist bypass for hosted browser</li>
        <li>PopupPanel example is wrong.</li>
        <li>UIObject needs a title property.</li>
        <li>JSNI methods in local classes don't work in hosted mode.</li>
        <li>HashMap throws a JavaScript error under some circumstances.</li>
        <li>Source and Public module tags should be logical instead of physical.</li>
        <li>Document that module source and public tags are now logical rather than physical.<br></li>
        <li>Default .launch file fails to use project's full classpath.</li>
        <li>RemoteServiceServlet sends back HTTP 200 OK but no content under WebSphere.</li>
        <li>Widget.onLoad() is called too early sometimes.</li>
        <li>Is it really a good idea to have add(Widget) on Panel?</li>
        <li>Web-mode JUnit that reports via RPC</li>
        <li>Tree fires onTreeItemStateChanged twice.</li>
        <li>Make JSON APIs part of gwt-user.jar</li>
        <li>Async JUnit</li>
        <li>String.equalsIgnoreCase(null) throws exception in web mode</li>
        <li>Using a class literal for a pruned typed causes ICE</li>
        <li>Make all built-in implementations of HasWidgets.iterator() support remove().</li>
        <li>JSON is slow in Web mode</li>
        <li>StringBuffer uses string concatenation, and is n-squared as a result</li>
        <li>Identical Strings can compare false in web mode.</li>
        <li>Tweaks to the property provider environment to support locale and improve code uniformity b/w hosted and web mode<br></li>
        <li>Server-side serialization is unusably slow for large data sets</li>
        <li>Client side serialization is unusably slow for large datasets</li>
        <li>Format source for JUnitTestCaseStubGeneratorm, ServerSerializationStream</li>
        <li>MethodDispatch not working correctly on IE.</li>
        <li>JavaScriptObject rescuing is incomplete.</li>
        <li>Reduce RPC wire size by not quoting non-strings.</li>
        <li>Cyclic object graphs can be corrupted during deserialization on the server</li>
        <li>Test methods that throw checked exceptions cause the generated code to fail to compile</li>
        <li>Allow RemoteServiceResponse compression to be controlled by subclasses</li>
        <li>Startup timing bug makes RootPanel.get(id) throw an NPE</li>
        <li>Change whitelist/blacklist settings to be command-line switches rather than system properties</li>
        <li>KeyCode is always 0 for keypress events on Mozilla.</li>
        <li>Add Panel.remove(int) convenience method.</li>
        <li>File Upload Widget</li>
        <li>PopupPanel needs to deal better with being empty.</li>
        <li>CheckBox.setEnabled() has reversed sense.</li>
        <li>History tokens have problems with URL encoding.</li>
        <li>Loosen restriction on when DockPanel.CENTER child may be added.</li>
        <li>AbsolutePanel needs getWidgetLeft() and getWidgetTop().</li>
        <li>Decision: how should FlowPanel behave?</li>
        <li>Samples with composites need to call initWidget() instead of the deprecated setWidget().</li>
        <li>RootPanel.get(String) should not be clearing the div's contents.</li>
        <li>ListBox, Image, and Hyperlink are missing style names, despite doc</li>
        <li>Hyperlink.removeClickListener is broken.</li>
        <li>Don't allow tabs to word-wrap internally on TabPanel</li>
        <li>Turkish locale problem with the RPC generated code - probably affects others too</li>
        <li>StackPanel.add() totally screwy.</li>
        <li>Referencing a field that could cause static initialization fails to cause a side effect.</li>
      </ul>

      <hr/>
      <a name="Release_Notes_1_0_21"></a>
      <h2>Release Notes for 1.0.21</h2>
      <p/>
      <h3>Fixed Issues</h3>
      <ul>
         <li><a href='http://code.google.com/webtoolkit/issues/5823700.html'>Issue #5823700 - GWT hosted mode does not work when IE 7 is installed</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8840603.html'>Issue #8840603 - GWT applications do not run in IE 7</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3844117.html'>Issue #3844117 - Cannot reference a final local variable from a deep inner class</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9157420.html'>Issue #9157420 - Compiler reports errors for non-ASCII characters (UTF-8 not supported)</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1524429.html'>Issue #1524429 - RPC exception due to empty strings</a>
         <li><a href='http://code.google.com/webtoolkit/issues/6000056.html'>Issue #6000056 - ArrayStoreException initializing multi-dimensional arrays</a>
         <li><a href='http://code.google.com/webtoolkit/issues/3490506.html'>Issue #3490506 - Tree widget remove() bug</a>
         <li><a href='http://code.google.com/webtoolkit/issues/8201889.html'>Issue #8201889 - Generated RPC proxy code fails to pull in String intrinsically</a>
         <li><a href='http://code.google.com/webtoolkit/issues/1600857.html'>Issue #1600857 - TabPanel getWidgetIndex() recursion</a>
         <li><a href='http://code.google.com/webtoolkit/issues/2705290.html'>Issue #2705290 - TabPanel widget does not remove tabs properly</a>
         <li><a href='http://code.google.com/webtoolkit/issues/9377889.html'>Issue #9377889 - TabBar method insertTab() not honoring 'asHTML' parameter</a>
         <li><a href='http://code.google.com/webtoolkit/issues/4387606.html'>Issue #4387606 - FlexTable and Grid issues</a>
      </ul>
   </body></html>
